diff options
author | dgp <dgp@users.sourceforge.net> | 2018-11-13 15:23:42 (GMT) |
---|---|---|
committer | dgp <dgp@users.sourceforge.net> | 2018-11-13 15:23:42 (GMT) |
commit | e38f8275221071a0f0c7ab3dedf264f91f76a5eb (patch) | |
tree | a104c06eec6b7205ee06763ccff2e05b434bb4c7 /generic/tclOO.c | |
parent | fc3971425ebb6b5c78c8300b280560a5d5920388 (diff) | |
parent | d739e9b6a832caa5729f3d77aaf3017b0c1fb867 (diff) | |
download | tcl-e38f8275221071a0f0c7ab3dedf264f91f76a5eb.zip tcl-e38f8275221071a0f0c7ab3dedf264f91f76a5eb.tar.gz tcl-e38f8275221071a0f0c7ab3dedf264f91f76a5eb.tar.bz2 |
Plug memory leak. Fork new trunk that isn't broken.
Diffstat (limited to 'generic/tclOO.c')
-rw-r--r-- | generic/tclOO.c | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/generic/tclOO.c b/generic/tclOO.c index 440f8e4..c87d7bb 100644 --- a/generic/tclOO.c +++ b/generic/tclOO.c @@ -1057,7 +1057,6 @@ TclOOReleaseClassContents( if (IsRootClass(oPtr) && !Deleted(fPtr->objectCls->thisPtr)) { Tcl_DeleteCommandFromToken(interp, fPtr->objectCls->thisPtr->command); } - oPtr->classPtr = NULL; } /* @@ -1183,7 +1182,9 @@ ObjectNamespaceDeleted( TclOORemoveFromInstances(oPtr, mixinPtr); TclOODecrRefCount(mixinPtr->thisPtr); } - Tcl_Free(oPtr->mixins.list); + if (oPtr->mixins.list != NULL) { + Tcl_Free(oPtr->mixins.list); + } } FOREACH(filterObj, oPtr->filters) { @@ -1384,6 +1385,10 @@ TclOORemoveFromMixins( break; } } + if (oPtr->mixins.num == 0) { + Tcl_Free(oPtr->mixins.list); + oPtr->mixins.list = NULL; + } return res; } |