diff options
author | dgp <dgp@users.sourceforge.net> | 2011-05-10 16:05:48 (GMT) |
---|---|---|
committer | dgp <dgp@users.sourceforge.net> | 2011-05-10 16:05:48 (GMT) |
commit | f9dece7738d140a66ebb5d47ee85c4d57249258a (patch) | |
tree | 1ca2feda250662282a8e77080fef123d9256b839 /generic/tclVar.c | |
parent | b1c2f2c9c6fcb329f1e23f9f5f1ef53c84b01bae (diff) | |
download | tcl-f9dece7738d140a66ebb5d47ee85c4d57249258a.zip tcl-f9dece7738d140a66ebb5d47ee85c4d57249258a.tar.gz tcl-f9dece7738d140a66ebb5d47ee85c4d57249258a.tar.bz2 |
Completed patch with mucho comments. Merge 8.5.bug_3173086
Diffstat (limited to 'generic/tclVar.c')
-rw-r--r-- | generic/tclVar.c | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/generic/tclVar.c b/generic/tclVar.c index 9815469..aaf1cb9 100644 --- a/generic/tclVar.c +++ b/generic/tclVar.c @@ -2554,13 +2554,14 @@ Tcl_AppendObjCmd( /* * Note that we do not need to increase the refCount of the Var * pointers: should a trace delete the variable, the return value - * of TclPtrSetVar will be NULL, and we will not access the - * variable again. + * of TclPtrSetVar will be NULL or emptyObjPtr, and we will not + * access the variable again. */ varValuePtr = TclPtrSetVar(interp, varPtr, arrayPtr, objv[1], NULL, objv[i], TCL_APPEND_VALUE|TCL_LEAVE_ERR_MSG, -1); - if (varValuePtr == NULL) { + if ((varValuePtr == NULL) || + (varValuePtr == ((Interp *) interp)->emptyObjPtr)) { return TCL_ERROR; } } @@ -4775,6 +4776,7 @@ FreeLocalVarName( if (namePtr) { Tcl_DecrRefCount(namePtr); } + objPtr->typePtr = NULL; } static void @@ -4816,6 +4818,7 @@ FreeNsVarName( CleanupVar(varPtr, NULL); } } + objPtr->typePtr = NULL; } static void @@ -4855,6 +4858,7 @@ FreeParsedVarName( TclDecrRefCount(arrayPtr); ckfree(elem); } + objPtr->typePtr = NULL; } static void |