summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authordgp <dgp@users.sourceforge.net>2014-09-08 21:22:05 (GMT)
committerdgp <dgp@users.sourceforge.net>2014-09-08 21:22:05 (GMT)
commit07be9a8aa0887809dd6d79d2f079fa1d1558790e (patch)
tree10d14e9df06165aa168a49772eb74720f9640539
parent277e045c81735e0509f6c38c56047faa52b5f246 (diff)
downloadtcl-07be9a8aa0887809dd6d79d2f079fa1d1558790e.zip
tcl-07be9a8aa0887809dd6d79d2f079fa1d1558790e.tar.gz
tcl-07be9a8aa0887809dd6d79d2f079fa1d1558790e.tar.bz2
Exceptional handling of oo::class has to be consistent throughout.
-rw-r--r--generic/tclOO.c4
-rw-r--r--tests/oo.test10
2 files changed, 13 insertions, 1 deletions
diff --git a/generic/tclOO.c b/generic/tclOO.c
index ace47fe..77e668b 100644
--- a/generic/tclOO.c
+++ b/generic/tclOO.c
@@ -1287,7 +1287,9 @@ TclOORemoveFromInstances(
removeInstance:
if (Deleted(clsPtr->thisPtr)) {
- DelRef(clsPtr->instances.list[i]);
+ if (!IsRootClass(clsPtr)) {
+ DelRef(clsPtr->instances.list[i]);
+ }
clsPtr->instances.list[i] = NULL;
} else {
clsPtr->instances.num--;
diff --git a/tests/oo.test b/tests/oo.test
index 8c515da..2c189ca 100644
--- a/tests/oo.test
+++ b/tests/oo.test
@@ -271,6 +271,16 @@ test oo-1.18.1 {Bug 75b8433707: memory leak in oo-1.18} -setup {
} -cleanup {
rename test-oo-1.18 {}
} -result 0
+test oo-1.18.2 {Bug 21c144f0f5} -setup {
+ interp create slave
+} -body {
+ slave eval {
+ oo::define [oo::class create foo] superclass oo::class
+ oo::class destroy
+ }
+} -cleanup {
+ interp delete slave
+}
test oo-1.19 {basic test of OO functionality: teardown order} -body {
oo::object create o
namespace delete [info object namespace o]