diff options
-rw-r--r-- | ChangeLog | 5 | ||||
-rw-r--r-- | generic/tkButton.c | 11 |
2 files changed, 13 insertions, 3 deletions
@@ -1,3 +1,8 @@ +2000-08-22 Jeff Hobbs <hobbs@scriptics.com> + + * generic/tkButton.c (ButtonTextVarProc): changed order of + incr/decr of new value object, in case they are equal. + 2000-08-18 Eric Melski <ericm@ajubasolutions.com> * generic/tkImgPhoto.c (ImgPhotoGet): Removed redundant call to diff --git a/generic/tkButton.c b/generic/tkButton.c index b539552..e761137 100644 --- a/generic/tkButton.c +++ b/generic/tkButton.c @@ -11,7 +11,7 @@ * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tkButton.c,v 1.8 2000/05/25 16:57:23 ericm Exp $ + * RCS: @(#) $Id: tkButton.c,v 1.9 2000/08/23 00:08:45 hobbs Exp $ */ #include "tkButton.h" @@ -1645,9 +1645,14 @@ ButtonTextVarProc(clientData, interp, name1, name2, flags) if (valuePtr == NULL) { valuePtr = Tcl_NewObj(); } - Tcl_DecrRefCount(butPtr->textPtr); + /* + * Incr valuePtr before Decr, in case they point to the same object. + * We could also do some short-circuiting in that case, but it + * shouldn't happen in practice. + */ + Tcl_IncrRefCount(valuePtr); butPtr->textPtr = valuePtr; - Tcl_IncrRefCount(butPtr->textPtr); + Tcl_DecrRefCount(butPtr->textPtr); TkpComputeButtonGeometry(butPtr); if ((butPtr->tkwin != NULL) && Tk_IsMapped(butPtr->tkwin) |