]> granicus.if.org Git - imagemagick/commitdiff
(no commit message)
authorcristy <urban-warrior@git.imagemagick.org>
Fri, 24 Jan 2014 00:03:05 +0000 (00:03 +0000)
committercristy <urban-warrior@git.imagemagick.org>
Fri, 24 Jan 2014 00:03:05 +0000 (00:03 +0000)
MagickCore/semaphore-private.h
MagickCore/semaphore.c

index 71558f30c1d17e5054af2bcae416b023409dd155..c3450e73ca398781854c782b331c2501a008f460 100644 (file)
@@ -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)
index c25d294aa4cff562a584085ace897fe42cbf5cff..3290a99e222354a4367a7e1c80269efb29e0e2c2 100644 (file)
@@ -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();
 }
 \f
 /*