From: Stephen D. <sd...@us...> - 2005-07-12 07:32:37
|
Update of /cvsroot/naviserver/naviserver/nsdb In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv20670/nsdb Modified Files: db.h dbtcl.c nsdb.c Log Message: 2005-07-11 Stephen Deasey <sd...@us...> * include/ns.h: * nsd/nsd.h: * nsd/nsmain.c: * nsd/queue.c: * nsd/tclcmds.c: * nsd/proc.c: * nsd/tclinit.c: Add generalised interp tracing mechanism which replaces Ns_TclInitInterps, Ns_TclRegisterDeferred etc. Restructured code for clarity. * nsd/tclset.c: * nsd/tclshare.c: * nsd/tclthread.c: * nsd/adprequest.c: s/NsGetInterp/NsGetInterpData/g * nsd/Makefile: * nsd/connio.c: * nsd/tclatclose.c: Moved at-close traces into tclinit.c. * nsd/tclmisc.c: Move Ns_TclPrintfResult into misc. * nsdb/db.h: * nsdb/nsdb.h: * nslog/nslog.c: * nsperm/nsperm.c: Remove usage of deprecated functions. Index: db.h =================================================================== RCS file: /cvsroot/naviserver/naviserver/nsdb/db.h,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -C2 -d -r1.1.1.1 -r1.2 *** db.h 16 Feb 2005 08:40:44 -0000 1.1.1.1 --- db.h 12 Jul 2005 07:31:40 -0000 1.2 *************** *** 35,39 **** extern void NsDbInitPools(void); extern void NsDbInitServer(char *server); ! extern Ns_TclInterpInitProc NsDbAddCmds; extern void NsDbClose(Ns_DbHandle *); extern void NsDbDisconnect(Ns_DbHandle *); --- 35,39 ---- extern void NsDbInitPools(void); extern void NsDbInitServer(char *server); ! extern Ns_TclTraceProc NsDbAddCmds; extern void NsDbClose(Ns_DbHandle *); extern void NsDbDisconnect(Ns_DbHandle *); Index: nsdb.c =================================================================== RCS file: /cvsroot/naviserver/naviserver/nsdb/nsdb.c,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** nsdb.c 10 Jun 2005 17:58:42 -0000 1.2 --- nsdb.c 12 Jul 2005 07:31:40 -0000 1.3 *************** *** 67,70 **** } NsDbInitServer(server); ! return Ns_TclInitInterps(server, NsDbAddCmds, server); } --- 67,71 ---- } NsDbInitServer(server); ! return Ns_TclRegisterTrace(server, NsDbAddCmds, server, ! NS_TCL_TRACE_CREATE); } Index: dbtcl.c =================================================================== RCS file: /cvsroot/naviserver/naviserver/nsdb/dbtcl.c,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** dbtcl.c 10 Jun 2005 17:58:42 -0000 1.2 --- dbtcl.c 12 Jul 2005 07:31:40 -0000 1.3 *************** *** 45,49 **** typedef struct InterpData { char *server; - int cleanup; Tcl_HashTable dbs; } InterpData; --- 45,48 ---- *************** *** 61,65 **** static Tcl_CmdProc DbCmd, QuoteListToListCmd, GetCsvCmd, DbErrorCodeCmd, DbErrorMsgCmd, GetCsvCmd, DbConfigPathCmd, PoolDescriptionCmd; ! static Ns_TclDeferProc ReleaseDbs; static char *datakey = "nsdb:data"; --- 60,64 ---- static Tcl_CmdProc DbCmd, QuoteListToListCmd, GetCsvCmd, DbErrorCodeCmd, DbErrorMsgCmd, GetCsvCmd, DbConfigPathCmd, PoolDescriptionCmd; ! static Ns_TclTraceProc ReleaseDbs; static char *datakey = "nsdb:data"; *************** *** 112,115 **** --- 111,115 ---- NsDbAddCmds(Tcl_Interp *interp, void *arg) { + char *server = arg; InterpData *idataPtr; *************** *** 119,126 **** idataPtr = ns_malloc(sizeof(InterpData)); ! idataPtr->server = arg; ! idataPtr->cleanup = 0; Tcl_InitHashTable(&idataPtr->dbs, TCL_STRING_KEYS); Tcl_SetAssocData(interp, datakey, FreeData, idataPtr); Tcl_CreateCommand(interp, "ns_db", DbCmd, idataPtr, NULL); --- 119,126 ---- idataPtr = ns_malloc(sizeof(InterpData)); ! idataPtr->server = server; Tcl_InitHashTable(&idataPtr->dbs, TCL_STRING_KEYS); Tcl_SetAssocData(interp, datakey, FreeData, idataPtr); + Ns_TclRegisterTrace(server, ReleaseDbs, NULL, NS_TCL_TRACE_DEALLOCATE); Tcl_CreateCommand(interp, "ns_db", DbCmd, idataPtr, NULL); *************** *** 132,135 **** --- 132,136 ---- Tcl_CreateCommand(interp, "ns_dbconfigpath", DbConfigPathCmd, idataPtr, NULL); Tcl_CreateCommand(interp, "ns_pooldescription", PoolDescriptionCmd, idataPtr, NULL); + return TCL_OK; } *************** *** 949,956 **** char buf[100]; - if (!idataPtr->cleanup) { - Ns_TclRegisterDeferred(interp, ReleaseDbs, idataPtr); - idataPtr->cleanup = 1; - } next = idataPtr->dbs.numEntries; do { --- 950,953 ---- *************** *** 1064,1083 **** */ ! static void ReleaseDbs(Tcl_Interp *interp, void *arg) { ! Ns_DbHandle *handlePtr; Tcl_HashEntry *hPtr; Tcl_HashSearch search; ! InterpData *idataPtr = arg; ! hPtr = Tcl_FirstHashEntry(&idataPtr->dbs, &search); ! while (hPtr != NULL) { ! handlePtr = Tcl_GetHashValue(hPtr); ! Ns_DbPoolPutHandle(handlePtr); ! hPtr = Tcl_NextHashEntry(&search); } ! Tcl_DeleteHashTable(&idataPtr->dbs); ! Tcl_InitHashTable(&idataPtr->dbs, TCL_STRING_KEYS); ! idataPtr->cleanup = 0; } --- 1061,1084 ---- */ ! static int ReleaseDbs(Tcl_Interp *interp, void *arg) { ! Ns_DbHandle *handlePtr; Tcl_HashEntry *hPtr; Tcl_HashSearch search; ! InterpData *idataPtr; ! idataPtr = Tcl_GetAssocData(interp, datakey, NULL); ! if (idataPtr != NULL) { ! hPtr = Tcl_FirstHashEntry(&idataPtr->dbs, &search); ! while (hPtr != NULL) { ! handlePtr = Tcl_GetHashValue(hPtr); ! Ns_DbPoolPutHandle(handlePtr); ! hPtr = Tcl_NextHashEntry(&search); ! } ! Tcl_DeleteHashTable(&idataPtr->dbs); ! Tcl_InitHashTable(&idataPtr->dbs, TCL_STRING_KEYS); } ! ! return TCL_OK; } |