diff options
author | dgp <dgp@users.sourceforge.net> | 2012-12-14 19:25:04 (GMT) |
---|---|---|
committer | dgp <dgp@users.sourceforge.net> | 2012-12-14 19:25:04 (GMT) |
commit | ad47aaa8d919090d79a2ce390b08653ef8e3fae8 (patch) | |
tree | 95baaaf86795c70b594ff3fa78b62dc588c4e242 /generic | |
parent | 55ceb591d7bd0c530c73961be1c05996e8cc5920 (diff) | |
parent | 4eaff43e124f523dca05591bc760fa9f32eb7672 (diff) | |
download | tcl-ad47aaa8d919090d79a2ce390b08653ef8e3fae8.zip tcl-ad47aaa8d919090d79a2ce390b08653ef8e3fae8.tar.gz tcl-ad47aaa8d919090d79a2ce390b08653ef8e3fae8.tar.bz2 |
merge trunk, update changes and re-tagcore_8_6_0core_8_6_0_rc
Diffstat (limited to 'generic')
-rw-r--r-- | generic/tcl.h | 12 | ||||
-rw-r--r-- | generic/tclCmdAH.c | 3 | ||||
-rw-r--r-- | generic/tclZlib.c | 19 |
3 files changed, 12 insertions, 22 deletions
diff --git a/generic/tcl.h b/generic/tcl.h index 6a6ac9b..3003abf 100644 --- a/generic/tcl.h +++ b/generic/tcl.h @@ -854,10 +854,7 @@ typedef struct Tcl_Obj { * whether an object is shared (i.e. has reference count > 1). Note: clients * should use Tcl_DecrRefCount() when they are finished using an object, and * should never call TclFreeObj() directly. TclFreeObj() is only defined and - * made public in tcl.h to support Tcl_DecrRefCount's macro definition. Note - * also that Tcl_DecrRefCount() refers to the parameter "obj" twice. This - * means that you should avoid calling it with an expression that is expensive - * to compute or has side effects. + * made public in tcl.h to support Tcl_DecrRefCount's macro definition. */ void Tcl_IncrRefCount(Tcl_Obj *objPtr); @@ -2504,7 +2501,12 @@ EXTERN void Tcl_GetMemoryInfo(Tcl_DString *dsPtr); * http://c2.com/cgi/wiki?TrivialDoWhileLoop */ # define Tcl_DecrRefCount(objPtr) \ - do { if (--(objPtr)->refCount <= 0) TclFreeObj(objPtr); } while(0) + do { \ + Tcl_Obj *_objPtr = (objPtr); \ + if (--(_objPtr)->refCount <= 0) { \ + TclFreeObj(_objPtr); \ + } \ + } while(0) # define Tcl_IsShared(objPtr) \ ((objPtr)->refCount > 1) #endif diff --git a/generic/tclCmdAH.c b/generic/tclCmdAH.c index 14951e4..133a61b 100644 --- a/generic/tclCmdAH.c +++ b/generic/tclCmdAH.c @@ -361,7 +361,8 @@ CatchObjCmdCallback( if (NULL == Tcl_ObjSetVar2(interp, optionVarNamePtr, NULL, options, TCL_LEAVE_ERR_MSG)) { - Tcl_DecrRefCount(options); + /* Do not decrRefCount 'options', it was already done by + * Tcl_ObjSetVar2 */ return TCL_ERROR; } } diff --git a/generic/tclZlib.c b/generic/tclZlib.c index 8fbe049..9c1176e 100644 --- a/generic/tclZlib.c +++ b/generic/tclZlib.c @@ -507,7 +507,7 @@ GenerateHeader( * ExtractHeader -- * * Take the values out of a gzip header and store them in a dictionary. - * SetValue is a helper function. + * SetValue is a helper macro. * * Results: * None. @@ -518,18 +518,8 @@ GenerateHeader( *---------------------------------------------------------------------- */ -static inline void -SetValue( - Tcl_Obj *dictObj, - const char *key, - Tcl_Obj *value) -{ - Tcl_Obj *keyObj = Tcl_NewStringObj(key, -1); - - Tcl_IncrRefCount(keyObj); - Tcl_DictObjPut(NULL, dictObj, keyObj, value); - TclDecrRefCount(keyObj); -} +#define SetValue(dictObj, key, value) \ + Tcl_DictObjPut(NULL, (dictObj), Tcl_NewStringObj((key), -1), (value)) static void ExtractHeader( @@ -2119,9 +2109,6 @@ ZlibCmd( } if (headerVarObj != NULL && Tcl_ObjSetVar2(interp, headerVarObj, NULL, headerDictObj, TCL_LEAVE_ERR_MSG) == NULL) { - if (headerDictObj) { - TclDecrRefCount(headerDictObj); - } return TCL_ERROR; } return TCL_OK; |