diff options
author | dgp <dgp@users.sourceforge.net> | 2014-09-08 21:22:05 (GMT) |
---|---|---|
committer | dgp <dgp@users.sourceforge.net> | 2014-09-08 21:22:05 (GMT) |
commit | 07be9a8aa0887809dd6d79d2f079fa1d1558790e (patch) | |
tree | 10d14e9df06165aa168a49772eb74720f9640539 | |
parent | 277e045c81735e0509f6c38c56047faa52b5f246 (diff) | |
download | tcl-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.c | 4 | ||||
-rw-r--r-- | tests/oo.test | 10 |
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] |