X-Git-Url: http://git.indexdata.com/?p=yaz-moved-to-github.git;a=blobdiff_plain;f=src%2Fnmem.c;h=4f2504e28d83b4a58856a715ed02932091aa5a75;hp=37de136f58468a1aa51909fa6ac9437dc695918d;hb=84d7b06c13daa609e93f353e655c4b02f936d65c;hpb=130c4f389f6e2166f533beb831e991f806130f72 diff --git a/src/nmem.c b/src/nmem.c index 37de136..4f2504e 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.8 2004-12-16 08:59:36 adam Exp $ + * $Id: nmem.c,v 1.14 2005-01-21 09:23:27 adam Exp $ */ /** @@ -20,8 +20,10 @@ #endif #include +#include #include #include +#include #include #include #include @@ -41,8 +43,25 @@ #define NMEM_CHUNK (4*1024) -static int log_level=0; -static int log_level_initialized=0; +struct align { + char x; + union { + char c; + short s; + int i; + long l; +#if HAVE_LONG_LONG + long long ll; +#endif + float f; + double d; + } u; +}; + +#define NMEM_ALIGN (offsetof(struct align, u)) + +static int log_level = 0; +static int log_level_initialized = 0; #ifdef WIN32 static CRITICAL_SECTION critical_section; @@ -77,11 +96,10 @@ YAZ_EXPORT void nmem_mutex_create(NMEM_MUTEX *p) { 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; if (!*p) { *p = (NMEM_MUTEX) malloc (sizeof(**p)); @@ -93,7 +111,6 @@ YAZ_EXPORT void nmem_mutex_create(NMEM_MUTEX *p) pth_mutex_init (&(*p)->m_handle); #endif } - NMEM_LEAVE; } YAZ_EXPORT void nmem_mutex_enter(NMEM_MUTEX p) @@ -122,7 +139,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 @@ -131,7 +147,6 @@ YAZ_EXPORT void nmem_mutex_destroy(NMEM_MUTEX *p) free (*p); *p = 0; } - NMEM_LEAVE; } static nmem_block *freelist = NULL; /* "global" freelists */ @@ -266,7 +281,7 @@ void *nmem_malloc(NMEM n, int size) } r = p->buf + p->top; /* align size */ - p->top += (size + (sizeof(long) - 1)) & ~(sizeof(long) - 1); + p->top += (size + (NMEM_ALIGN - 1)) & ~(NMEM_ALIGN - 1); n->total += size; NMEM_LEAVE; return r; @@ -289,8 +304,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; @@ -398,24 +413,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)