diff options
author | dgp <dgp@users.sourceforge.net> | 2014-07-19 16:35:59 (GMT) |
---|---|---|
committer | dgp <dgp@users.sourceforge.net> | 2014-07-19 16:35:59 (GMT) |
commit | eacbc736d923a9b9b77f628876dac58ad34dfd10 (patch) | |
tree | 856bc1201a32ad2c13a02076460fd6cf7c49ec18 /generic | |
parent | 1bd8f407a5fc44a8b7a54bb78d8d29a2e5b0358f (diff) | |
parent | b32141b751698c59b7c8b574b52963976f3e0dd4 (diff) | |
download | tcl-eacbc736d923a9b9b77f628876dac58ad34dfd10.zip tcl-eacbc736d923a9b9b77f628876dac58ad34dfd10.tar.gz tcl-eacbc736d923a9b9b77f628876dac58ad34dfd10.tar.bz2 |
[75b8433707] Revised fix for memleak in oo instance list management.
Diffstat (limited to 'generic')
-rw-r--r-- | generic/tclOO.c | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/generic/tclOO.c b/generic/tclOO.c index de00733..02e00c9 100644 --- a/generic/tclOO.c +++ b/generic/tclOO.c @@ -1008,6 +1008,12 @@ ReleaseClassContents( } if (!Deleted(instancePtr)) { Tcl_DeleteCommandFromToken(interp, instancePtr->command); + /* + * Tcl_DeleteCommandFromToken() may have done to whole + * job for us. Roll back and check again. + */ + i--; + continue; } DelRef(instancePtr); } @@ -1280,6 +1286,7 @@ TclOORemoveFromInstances( removeInstance: if (Deleted(clsPtr->thisPtr)) { + DelRef(clsPtr->instances.list[i]); clsPtr->instances.list[i] = NULL; } else { clsPtr->instances.num--; |