diff options
author | hobbs <hobbs> | 2001-06-28 01:22:21 (GMT) |
---|---|---|
committer | hobbs <hobbs> | 2001-06-28 01:22:21 (GMT) |
commit | 293dbdc050e3bd444292641282727a0bd24eef27 (patch) | |
tree | 913c84ddcaadd7359ee726c2c7be0a8aeb368389 /generic/tclInt.h | |
parent | 2b6587fc6cf0bc144393a46fcf12967e8cdcbde6 (diff) | |
download | tcl-293dbdc050e3bd444292641282727a0bd24eef27.zip tcl-293dbdc050e3bd444292641282727a0bd24eef27.tar.gz tcl-293dbdc050e3bd444292641282727a0bd24eef27.tar.bz2 |
* generic/tclInt.h:
* generic/tclObj.c:
* unix/Makefile.in: added a -DPURIFY mode that makes Tcl_Obj's
allocated and free singularly (instead of in alloc in blocks and
never free) to allow checkers like Purify to operate better.
Diffstat (limited to 'generic/tclInt.h')
-rw-r--r-- | generic/tclInt.h | 33 |
1 files changed, 32 insertions, 1 deletions
diff --git a/generic/tclInt.h b/generic/tclInt.h index 7af3c65..2ee93d0 100644 --- a/generic/tclInt.h +++ b/generic/tclInt.h @@ -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: tclInt.h,v 1.56 2001/06/17 03:48:19 dgp Exp $ + * RCS: @(#) $Id: tclInt.h,v 1.57 2001/06/28 01:22:21 hobbs Exp $ */ #ifndef _TCLINT @@ -2183,6 +2183,37 @@ EXTERN int TclCompileWhileCmd _ANSI_ARGS_((Tcl_Interp *interp, TclIncrObjsFreed(); \ } +#elif defined(PURIFY) + +/* + * The PURIFY mode is like the regular mode, but instead of doing block + * Tcl_Obj allocation and keeping a freed list for efficiency, it always + * allocates and frees a single Tcl_Obj so that tools like Purify can + * better track memory leaks + */ + +# define TclNewObj(objPtr) \ + (objPtr) = (Tcl_Obj *) Tcl_Ckalloc(sizeof(Tcl_Obj)); \ + (objPtr)->refCount = 0; \ + (objPtr)->bytes = tclEmptyStringRep; \ + (objPtr)->length = 0; \ + (objPtr)->typePtr = NULL; \ + TclIncrObjsAllocated(); + +# define TclDecrRefCount(objPtr) \ + if (--(objPtr)->refCount <= 0) { \ + if (((objPtr)->bytes != NULL) \ + && ((objPtr)->bytes != tclEmptyStringRep)) { \ + ckfree((char *) (objPtr)->bytes); \ + } \ + if (((objPtr)->typePtr != NULL) \ + && ((objPtr)->typePtr->freeIntRepProc != NULL)) { \ + (objPtr)->typePtr->freeIntRepProc(objPtr); \ + } \ + ckfree((char *) (objPtr)); \ + TclIncrObjsFreed(); \ + } + #else /* not TCL_MEM_DEBUG */ #ifdef TCL_THREADS |