Tcl Source Code

Artifact [e7519f8111]
Login

Artifact e7519f8111ea0af0104b866bc47f979ee329ab59:

Attachment "1655294.patch" to ticket [1655294fff] added by dgp 2007-02-09 04:34:49.
Index: generic/tclNamesp.c
===================================================================
RCS file: /cvsroot/tcl/tcl/generic/tclNamesp.c,v
retrieving revision 1.31.2.13
diff -u -r1.31.2.13 tclNamesp.c
--- generic/tclNamesp.c	28 Nov 2006 22:20:02 -0000	1.31.2.13
+++ generic/tclNamesp.c	8 Feb 2007 21:32:23 -0000
@@ -299,6 +299,7 @@
     }
 
     nsPtr->activationCount++;
+    nsPtr->refCount++;
     framePtr->nsPtr = nsPtr;
     framePtr->isProcCallFrame = isProcCallFrame;
     framePtr->objc = 0;
@@ -384,6 +385,10 @@
 	    && (nsPtr->activationCount == 0)) {
         Tcl_DeleteNamespace((Tcl_Namespace *) nsPtr);
     }
+    nsPtr->refCount--;
+    if ((nsPtr->refCount == 0) && (nsPtr->flags & NS_DEAD)) {
+	NamespaceFree(nsPtr);
+    }
     framePtr->nsPtr = NULL;
 }
 
@@ -602,7 +607,7 @@
      * FreeNsNameInternalRep when its refCount reaches 0.
      */
 
-    if (nsPtr->activationCount > 0) {
+    if (0 && nsPtr->activationCount > 0) {
         nsPtr->flags |= NS_DYING;
         if (nsPtr->parentPtr != NULL) {
             entryPtr = Tcl_FindHashEntry(&nsPtr->parentPtr->childTable,
@@ -634,9 +639,12 @@
 	     */
 
             TclDeleteNamespaceVars(nsPtr);
+	    Tcl_InitHashTable(&nsPtr->varTable, TCL_STRING_KEYS);
 	    
             Tcl_DeleteHashTable(&nsPtr->childTable);
+	    Tcl_InitHashTable(&nsPtr->childTable, TCL_STRING_KEYS);
             Tcl_DeleteHashTable(&nsPtr->cmdTable);
+	    Tcl_InitHashTable(&nsPtr->cmdTable, TCL_STRING_KEYS);
 
             /*
              * If the reference count is 0, then discard the namespace.