From: Adam Dickmeiss Date: Fri, 9 Sep 2005 10:32:09 +0000 (+0000) Subject: Changed nmem_mutex_create so that it properly handles concurrent X-Git-Tag: YAZ.2.1.10~78 X-Git-Url: http://git.indexdata.com/?p=yaz-moved-to-github.git;a=commitdiff_plain;h=cb0de81ba19b675141bf9a8e5094e2fc973385e0 Changed nmem_mutex_create so that it properly handles concurrent calls. Now, only first thread will initialize the mutex. Others will do nothing. --- diff --git a/src/nmem.c b/src/nmem.c index 6fb23fd..1b4853e 100644 --- a/src/nmem.c +++ b/src/nmem.c @@ -2,7 +2,7 @@ * Copyright (C) 1995-2005, Index Data ApS * See the file LICENSE for details. * - * $Id: nmem.c,v 1.19 2005-06-25 15:46:04 adam Exp $ + * $Id: nmem.c,v 1.20 2005-09-09 10:32:09 adam Exp $ */ /** @@ -109,17 +109,19 @@ struct nmem_mutex { YAZ_EXPORT void nmem_mutex_create(NMEM_MUTEX *p) { + NMEM_ENTER; if (!*p) { - *p = (NMEM_MUTEX) malloc (sizeof(**p)); + *p = (NMEM_MUTEX) malloc(sizeof(**p)); #ifdef WIN32 InitializeCriticalSection(&(*p)->m_handle); #elif YAZ_POSIX_THREADS - pthread_mutex_init (&(*p)->m_handle, 0); + pthread_mutex_init(&(*p)->m_handle, 0); #elif YAZ_GNU_THREADS - pth_mutex_init (&(*p)->m_handle); + pth_mutex_init(&(*p)->m_handle); #endif } + NMEM_LEAVE; if (!log_level_initialized) { log_level_initialized = 1; @@ -159,7 +161,7 @@ YAZ_EXPORT void nmem_mutex_destroy(NMEM_MUTEX *p) #ifdef WIN32 DeleteCriticalSection(&(*p)->m_handle); #endif - free (*p); + free(*p); *p = 0; } }