From 283f4b6204dfa73280a57969b67b4151175142b0 Mon Sep 17 00:00:00 2001 From: Miguel Sofer Date: Mon, 26 Aug 2002 13:05:55 +0000 Subject: * generic/tclThreadAlloc.c: small optimisation, reducing the new allocator's overhead. --- ChangeLog | 5 +++++ generic/tclThreadAlloc.c | 33 +++++++++++++++++++++++++++------ 2 files changed, 32 insertions(+), 6 deletions(-) diff --git a/ChangeLog b/ChangeLog index 15b2f95..84a2da1 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2002-08-26 Miguel Sofer + + * generic/tclThreadAlloc.c: small optimisation, reducing the + new allocator's overhead. + 2002-08-23 Miguel Sofer * generic/tclObj.c (USE_THREAD_ALLOC): fixed leak [Bug 597936]. diff --git a/generic/tclThreadAlloc.c b/generic/tclThreadAlloc.c index 4d93305..8f702f4 100755 --- a/generic/tclThreadAlloc.c +++ b/generic/tclThreadAlloc.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: tclThreadAlloc.c,v 1.3 2002/08/23 21:07:04 msofer Exp $ */ + * RCS: @(#) $Id: tclThreadAlloc.c,v 1.4 2002/08/26 13:05:56 msofer Exp $ */ #if defined(TCL_THREADS) && defined(USE_THREAD_ALLOC) @@ -42,6 +42,7 @@ extern void TclpSetAllocCache(void *); * The following define the number of Tcl_Obj's to allocate/move * at a time and the high water mark to prune a per-thread cache. * On a 32 bit system, sizeof(Tcl_Obj) = 24 so 800 * 24 = ~16k. + * */ #define NOBJALLOC 800 @@ -302,10 +303,14 @@ TclFreeAllocCache(void *arg) char * TclpAlloc(unsigned int reqsize) { - Cache *cachePtr = GetCache(); + Cache *cachePtr = TclpGetAllocCache(); Block *blockPtr; register int bucket; size_t size; + + if (cachePtr == NULL) { + cachePtr = GetCache(); + } /* * Increment the requested size to include room for @@ -366,9 +371,13 @@ void TclpFree(char *ptr) { if (ptr != NULL) { - Cache *cachePtr = GetCache(); + Cache *cachePtr = TclpGetAllocCache(); Block *blockPtr; int bucket; + + if (cachePtr == NULL) { + cachePtr = GetCache(); + } /* * Get the block back from the user pointer and @@ -417,7 +426,7 @@ TclpFree(char *ptr) char * TclpRealloc(char *ptr, unsigned int reqsize) { - Cache *cachePtr = GetCache(); + Cache *cachePtr = TclpGetAllocCache(); Block *blockPtr; void *new; size_t size, min; @@ -427,6 +436,10 @@ TclpRealloc(char *ptr, unsigned int reqsize) return TclpAlloc(reqsize); } + if (cachePtr == NULL) { + cachePtr = GetCache(); + } + /* * If the block is not a system block and fits in place, * simply return the existing pointer. Otherwise, if the block @@ -497,11 +510,15 @@ TclpRealloc(char *ptr, unsigned int reqsize) Tcl_Obj * TclThreadAllocObj(void) { - register Cache *cachePtr = GetCache(); + register Cache *cachePtr = TclpGetAllocCache(); register int nmove; register Tcl_Obj *objPtr; Tcl_Obj *newObjsPtr; + if (cachePtr == NULL) { + cachePtr = GetCache(); + } + /* * Get this thread's obj list structure and move * or allocate new objs if necessary. @@ -562,7 +579,11 @@ TclThreadAllocObj(void) void TclThreadFreeObj(Tcl_Obj *objPtr) { - Cache *cachePtr = GetCache(); + Cache *cachePtr = TclpGetAllocCache(); + + if (cachePtr == NULL) { + cachePtr = GetCache(); + } /* * Get this thread's list and push on the free Tcl_Obj. -- cgit v0.12