From: cristy Date: Fri, 24 Jan 2014 00:03:05 +0000 (+0000) Subject: (no commit message) X-Git-Tag: 7.0.1-0~2806 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=a2719ab91865bdc5d8dee5d15527ee0b85005a94;p=imagemagick --- diff --git a/MagickCore/semaphore-private.h b/MagickCore/semaphore-private.h index 71558f30c..c3450e73c 100644 --- a/MagickCore/semaphore-private.h +++ b/MagickCore/semaphore-private.h @@ -42,6 +42,34 @@ static ssize_t semaphore_mutex = 0; #endif +static MagickBooleanType + active_mutex = MagickFalse; + +static inline void DestroyMagickMutex(void) +{ + if (active_mutex != MagickFalse) +#if defined(MAGICKCORE_OPENMP_SUPPORT) + omp_destroy_lock(&semaphore_mutex); +#elif defined(MAGICKCORE_THREAD_SUPPORT) + ; +#elif defined(MAGICKCORE_HAVE_WINTHREADS) + DeleteCriticalSection(&semaphore_mutex); +#endif + active_mutex=MagickFalse; +} + +static inline void InitializeMagickMutex(void) +{ + if (active_mutex == MagickFalse) +#if defined(MAGICKCORE_OPENMP_SUPPORT) + omp_init_lock(&semaphore_mutex); +#elif defined(MAGICKCORE_THREAD_SUPPORT) + ; +#elif defined(MAGICKCORE_HAVE_WINTHREADS) + InitializeCriticalSection(&semaphore_mutex); +#endif +} + static inline void LockMagickMutex(void) { #if defined(MAGICKCORE_OPENMP_SUPPORT) diff --git a/MagickCore/semaphore.c b/MagickCore/semaphore.c index c25d294aa..3290a99e2 100644 --- a/MagickCore/semaphore.c +++ b/MagickCore/semaphore.c @@ -97,6 +97,7 @@ MagickExport void AcquireSemaphoreInfo(SemaphoreInfo **semaphore_info) assert(semaphore_info != (SemaphoreInfo **) NULL); if (*semaphore_info == (SemaphoreInfo *) NULL) { + InitializeMagickMutex(); LockMagickMutex(); if (*semaphore_info == (SemaphoreInfo *) NULL) *semaphore_info=AllocateSemaphoreInfo(); @@ -446,6 +447,7 @@ MagickPrivate MagickBooleanType SemaphoreComponentGenesis(void) */ MagickPrivate void SemaphoreComponentTerminus(void) { + DestroyMagickMutex(); } /*