X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=src%2Fnmem.c;h=f1fcb1ae5bace1280474d1ee601f0f0182b339df;hb=fe3ae86a97bef6a815e2f04cdcaa77307801c902;hp=947a492fdb669e009b863e28016005a2116af811;hpb=42dcf1902943937854ceacc8e3c72ec40fe2f48c;p=yaz-moved-to-github.git diff --git a/src/nmem.c b/src/nmem.c index 947a492..f1fcb1a 100644 --- a/src/nmem.c +++ b/src/nmem.c @@ -1,8 +1,8 @@ /* - * Copyright (c) 1995-2004, Index Data. + * Copyright (C) 1995-2005, Index Data ApS * See the file LICENSE for details. * - * $Id: nmem.c,v 1.10 2005-01-04 21:27:54 mike Exp $ + * $Id: nmem.c,v 1.17 2005-06-03 20:33:13 adam Exp $ */ /** @@ -20,6 +20,7 @@ #endif #include +#include #include #include #include @@ -42,6 +43,21 @@ #define NMEM_CHUNK (4*1024) +struct nmem_block +{ + char *buf; /* memory allocated in this block */ + size_t size; /* size of buf */ + size_t top; /* top of buffer */ + struct nmem_block *next; +}; + +struct nmem_control +{ + int total; + nmem_block *blocks; + struct nmem_control *next; +}; + struct align { char x; union { @@ -49,7 +65,9 @@ struct align { short s; int i; long l; +#if HAVE_LONG_LONG long long ll; +#endif float f; double d; } u; @@ -57,8 +75,8 @@ struct align { #define NMEM_ALIGN (offsetof(struct align, u)) -static int log_level=0; -static int log_level_initialized=0; +static int log_level = 0; +static int log_level_initialized = 0; #ifdef WIN32 static CRITICAL_SECTION critical_section; @@ -91,13 +109,6 @@ struct nmem_mutex { YAZ_EXPORT void nmem_mutex_create(NMEM_MUTEX *p) { - if (!log_level_initialized) - { - log_level=yaz_log_module_level("nmem"); - log_level_initialized=1; - } - - NMEM_ENTER; if (!*p) { *p = (NMEM_MUTEX) malloc (sizeof(**p)); @@ -109,7 +120,12 @@ YAZ_EXPORT void nmem_mutex_create(NMEM_MUTEX *p) pth_mutex_init (&(*p)->m_handle); #endif } - NMEM_LEAVE; + if (!log_level_initialized) + { + log_level_initialized = 1; + log_level = yaz_log_module_level("nmem"); + } + } YAZ_EXPORT void nmem_mutex_enter(NMEM_MUTEX p) @@ -138,7 +154,6 @@ YAZ_EXPORT void nmem_mutex_leave(NMEM_MUTEX p) YAZ_EXPORT void nmem_mutex_destroy(NMEM_MUTEX *p) { - NMEM_ENTER; if (*p) { #ifdef WIN32 @@ -147,7 +162,6 @@ YAZ_EXPORT void nmem_mutex_destroy(NMEM_MUTEX *p) free (*p); *p = 0; } - NMEM_LEAVE; } static nmem_block *freelist = NULL; /* "global" freelists */ @@ -305,8 +319,8 @@ NMEM nmem_create(void) #endif if (!log_level_initialized) { - log_level=yaz_log_module_level("nmem"); - log_level_initialized=1; + log_level = yaz_log_module_level("nmem"); + log_level_initialized = 1; } NMEM_ENTER; @@ -414,24 +428,23 @@ void nmem_critical_leave (void) void nmem_init (void) { - if (!log_level_initialized) - { - log_level=yaz_log_module_level("nmem"); - log_level_initialized=1; - } if (++nmem_init_flag == 1) { #ifdef WIN32 InitializeCriticalSection(&critical_section); #elif YAZ_GNU_THREADS - yaz_log (log_level, "pth_init"); /* ??? */ pth_init (); #endif nmem_active_no = 0; freelist = NULL; cfreelist = NULL; } + if (!log_level_initialized) + { + log_level = yaz_log_module_level("nmem"); + log_level_initialized = 1; + } } void nmem_exit (void)