Artifact
e7519f8111ea0af0104b866bc47f979ee329ab59:
Attachment "1655294.patch" to
ticket [1655294fff]
added by
dgp
2007-02-09 04:34:49.
0000: 49 6e 64 65 78 3a 20 67 65 6e 65 72 69 63 2f 74 Index: generic/t
0010: 63 6c 4e 61 6d 65 73 70 2e 63 0a 3d 3d 3d 3d 3d clNamesp.c.=====
0020: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
0030: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
0040: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
0050: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 52 ==============.R
0060: 43 53 20 66 69 6c 65 3a 20 2f 63 76 73 72 6f 6f CS file: /cvsroo
0070: 74 2f 74 63 6c 2f 74 63 6c 2f 67 65 6e 65 72 69 t/tcl/tcl/generi
0080: 63 2f 74 63 6c 4e 61 6d 65 73 70 2e 63 2c 76 0a c/tclNamesp.c,v.
0090: 72 65 74 72 69 65 76 69 6e 67 20 72 65 76 69 73 retrieving revis
00a0: 69 6f 6e 20 31 2e 33 31 2e 32 2e 31 33 0a 64 69 ion 1.31.2.13.di
00b0: 66 66 20 2d 75 20 2d 72 31 2e 33 31 2e 32 2e 31 ff -u -r1.31.2.1
00c0: 33 20 74 63 6c 4e 61 6d 65 73 70 2e 63 0a 2d 2d 3 tclNamesp.c.--
00d0: 2d 20 67 65 6e 65 72 69 63 2f 74 63 6c 4e 61 6d - generic/tclNam
00e0: 65 73 70 2e 63 09 32 38 20 4e 6f 76 20 32 30 30 esp.c.28 Nov 200
00f0: 36 20 32 32 3a 32 30 3a 30 32 20 2d 30 30 30 30 6 22:20:02 -0000
0100: 09 31 2e 33 31 2e 32 2e 31 33 0a 2b 2b 2b 20 67 .1.31.2.13.+++ g
0110: 65 6e 65 72 69 63 2f 74 63 6c 4e 61 6d 65 73 70 eneric/tclNamesp
0120: 2e 63 09 38 20 46 65 62 20 32 30 30 37 20 32 31 .c.8 Feb 2007 21
0130: 3a 33 32 3a 32 33 20 2d 30 30 30 30 0a 40 40 20 :32:23 -0000.@@
0140: 2d 32 39 39 2c 36 20 2b 32 39 39 2c 37 20 40 40 -299,6 +299,7 @@
0150: 0a 20 20 20 20 20 7d 0a 20 0a 20 20 20 20 20 6e . }. . n
0160: 73 50 74 72 2d 3e 61 63 74 69 76 61 74 69 6f 6e sPtr->activation
0170: 43 6f 75 6e 74 2b 2b 3b 0a 2b 20 20 20 20 6e 73 Count++;.+ ns
0180: 50 74 72 2d 3e 72 65 66 43 6f 75 6e 74 2b 2b 3b Ptr->refCount++;
0190: 0a 20 20 20 20 20 66 72 61 6d 65 50 74 72 2d 3e . framePtr->
01a0: 6e 73 50 74 72 20 3d 20 6e 73 50 74 72 3b 0a 20 nsPtr = nsPtr;.
01b0: 20 20 20 20 66 72 61 6d 65 50 74 72 2d 3e 69 73 framePtr->is
01c0: 50 72 6f 63 43 61 6c 6c 46 72 61 6d 65 20 3d 20 ProcCallFrame =
01d0: 69 73 50 72 6f 63 43 61 6c 6c 46 72 61 6d 65 3b isProcCallFrame;
01e0: 0a 20 20 20 20 20 66 72 61 6d 65 50 74 72 2d 3e . framePtr->
01f0: 6f 62 6a 63 20 3d 20 30 3b 0a 40 40 20 2d 33 38 objc = 0;.@@ -38
0200: 34 2c 36 20 2b 33 38 35 2c 31 30 20 40 40 0a 20 4,6 +385,10 @@.
0210: 09 20 20 20 20 26 26 20 28 6e 73 50 74 72 2d 3e . && (nsPtr->
0220: 61 63 74 69 76 61 74 69 6f 6e 43 6f 75 6e 74 20 activationCount
0230: 3d 3d 20 30 29 29 20 7b 0a 20 20 20 20 20 20 20 == 0)) {.
0240: 20 20 54 63 6c 5f 44 65 6c 65 74 65 4e 61 6d 65 Tcl_DeleteName
0250: 73 70 61 63 65 28 28 54 63 6c 5f 4e 61 6d 65 73 space((Tcl_Names
0260: 70 61 63 65 20 2a 29 20 6e 73 50 74 72 29 3b 0a pace *) nsPtr);.
0270: 20 20 20 20 20 7d 0a 2b 20 20 20 20 6e 73 50 74 }.+ nsPt
0280: 72 2d 3e 72 65 66 43 6f 75 6e 74 2d 2d 3b 0a 2b r->refCount--;.+
0290: 20 20 20 20 69 66 20 28 28 6e 73 50 74 72 2d 3e if ((nsPtr->
02a0: 72 65 66 43 6f 75 6e 74 20 3d 3d 20 30 29 20 26 refCount == 0) &
02b0: 26 20 28 6e 73 50 74 72 2d 3e 66 6c 61 67 73 20 & (nsPtr->flags
02c0: 26 20 4e 53 5f 44 45 41 44 29 29 20 7b 0a 2b 09 & NS_DEAD)) {.+.
02d0: 4e 61 6d 65 73 70 61 63 65 46 72 65 65 28 6e 73 NamespaceFree(ns
02e0: 50 74 72 29 3b 0a 2b 20 20 20 20 7d 0a 20 20 20 Ptr);.+ }.
02f0: 20 20 66 72 61 6d 65 50 74 72 2d 3e 6e 73 50 74 framePtr->nsPt
0300: 72 20 3d 20 4e 55 4c 4c 3b 0a 20 7d 0a 20 0c 0a r = NULL;. }. ..
0310: 40 40 20 2d 36 30 32 2c 37 20 2b 36 30 37 2c 37 @@ -602,7 +607,7
0320: 20 40 40 0a 20 20 20 20 20 20 2a 20 46 72 65 65 @@. * Free
0330: 4e 73 4e 61 6d 65 49 6e 74 65 72 6e 61 6c 52 65 NsNameInternalRe
0340: 70 20 77 68 65 6e 20 69 74 73 20 72 65 66 43 6f p when its refCo
0350: 75 6e 74 20 72 65 61 63 68 65 73 20 30 2e 0a 20 unt reaches 0..
0360: 20 20 20 20 20 2a 2f 0a 20 0a 2d 20 20 20 20 69 */. .- i
0370: 66 20 28 6e 73 50 74 72 2d 3e 61 63 74 69 76 61 f (nsPtr->activa
0380: 74 69 6f 6e 43 6f 75 6e 74 20 3e 20 30 29 20 7b tionCount > 0) {
0390: 0a 2b 20 20 20 20 69 66 20 28 30 20 26 26 20 6e .+ if (0 && n
03a0: 73 50 74 72 2d 3e 61 63 74 69 76 61 74 69 6f 6e sPtr->activation
03b0: 43 6f 75 6e 74 20 3e 20 30 29 20 7b 0a 20 20 20 Count > 0) {.
03c0: 20 20 20 20 20 20 6e 73 50 74 72 2d 3e 66 6c 61 nsPtr->fla
03d0: 67 73 20 7c 3d 20 4e 53 5f 44 59 49 4e 47 3b 0a gs |= NS_DYING;.
03e0: 20 20 20 20 20 20 20 20 20 69 66 20 28 6e 73 50 if (nsP
03f0: 74 72 2d 3e 70 61 72 65 6e 74 50 74 72 20 21 3d tr->parentPtr !=
0400: 20 4e 55 4c 4c 29 20 7b 0a 20 20 20 20 20 20 20 NULL) {.
0410: 20 20 20 20 20 20 65 6e 74 72 79 50 74 72 20 3d entryPtr =
0420: 20 54 63 6c 5f 46 69 6e 64 48 61 73 68 45 6e 74 Tcl_FindHashEnt
0430: 72 79 28 26 6e 73 50 74 72 2d 3e 70 61 72 65 6e ry(&nsPtr->paren
0440: 74 50 74 72 2d 3e 63 68 69 6c 64 54 61 62 6c 65 tPtr->childTable
0450: 2c 0a 40 40 20 2d 36 33 34 2c 39 20 2b 36 33 39 ,.@@ -634,9 +639
0460: 2c 31 32 20 40 40 0a 20 09 20 20 20 20 20 2a 2f ,12 @@. . */
0470: 0a 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 . .
0480: 54 63 6c 44 65 6c 65 74 65 4e 61 6d 65 73 70 61 TclDeleteNamespa
0490: 63 65 56 61 72 73 28 6e 73 50 74 72 29 3b 0a 2b ceVars(nsPtr);.+
04a0: 09 20 20 20 20 54 63 6c 5f 49 6e 69 74 48 61 73 . Tcl_InitHas
04b0: 68 54 61 62 6c 65 28 26 6e 73 50 74 72 2d 3e 76 hTable(&nsPtr->v
04c0: 61 72 54 61 62 6c 65 2c 20 54 43 4c 5f 53 54 52 arTable, TCL_STR
04d0: 49 4e 47 5f 4b 45 59 53 29 3b 0a 20 09 20 20 20 ING_KEYS);. .
04e0: 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 54 . T
04f0: 63 6c 5f 44 65 6c 65 74 65 48 61 73 68 54 61 62 cl_DeleteHashTab
0500: 6c 65 28 26 6e 73 50 74 72 2d 3e 63 68 69 6c 64 le(&nsPtr->child
0510: 54 61 62 6c 65 29 3b 0a 2b 09 20 20 20 20 54 63 Table);.+. Tc
0520: 6c 5f 49 6e 69 74 48 61 73 68 54 61 62 6c 65 28 l_InitHashTable(
0530: 26 6e 73 50 74 72 2d 3e 63 68 69 6c 64 54 61 62 &nsPtr->childTab
0540: 6c 65 2c 20 54 43 4c 5f 53 54 52 49 4e 47 5f 4b le, TCL_STRING_K
0550: 45 59 53 29 3b 0a 20 20 20 20 20 20 20 20 20 20 EYS);.
0560: 20 20 20 54 63 6c 5f 44 65 6c 65 74 65 48 61 73 Tcl_DeleteHas
0570: 68 54 61 62 6c 65 28 26 6e 73 50 74 72 2d 3e 63 hTable(&nsPtr->c
0580: 6d 64 54 61 62 6c 65 29 3b 0a 2b 09 20 20 20 20 mdTable);.+.
0590: 54 63 6c 5f 49 6e 69 74 48 61 73 68 54 61 62 6c Tcl_InitHashTabl
05a0: 65 28 26 6e 73 50 74 72 2d 3e 63 6d 64 54 61 62 e(&nsPtr->cmdTab
05b0: 6c 65 2c 20 54 43 4c 5f 53 54 52 49 4e 47 5f 4b le, TCL_STRING_K
05c0: 45 59 53 29 3b 0a 20 0a 20 20 20 20 20 20 20 20 EYS);. .
05d0: 20 20 20 20 20 2f 2a 0a 20 20 20 20 20 20 20 20 /*.
05e0: 20 20 20 20 20 20 2a 20 49 66 20 74 68 65 20 72 * If the r
05f0: 65 66 65 72 65 6e 63 65 20 63 6f 75 6e 74 20 69 eference count i
0600: 73 20 30 2c 20 74 68 65 6e 20 64 69 73 63 61 72 s 0, then discar
0610: 64 20 74 68 65 20 6e 61 6d 65 73 70 61 63 65 2e d the namespace.
0620: 0a .