diff -r --unified /home/stijn/parsec-2.1-mirror/pkgs/libs/imagick/src/magick/memory.c /home/stijn/parsec-2.1/pkgs/libs/imagick/src/magick/memory.c
--- /home/stijn/parsec-2.1-mirror/pkgs/libs/imagick/src/magick/memory.c	2013-11-08 17:15:05.435716212 +0100
+++ /home/stijn/parsec-2.1/pkgs/libs/imagick/src/magick/memory.c	2013-12-13 08:43:50.946793679 +0100
@@ -320,8 +320,9 @@
 #if !defined(UseEmbeddableMagick)
   memory=malloc(size == 0 ? 1UL : size);
 #else
-  if (free_segments == (DataSegmentInfo *) NULL)
-    {
+  // MVEE PATCH: access to free_segments was racy
+  //if (free_segments == (DataSegmentInfo *) NULL)
+  //  {
       AcquireSemaphoreInfo(&memory_semaphore);
       if (free_segments == (DataSegmentInfo *) NULL)
         {
@@ -342,9 +343,9 @@
           }
           free_segments=(&memory_info.segment_pool[0]);
         }
-      RelinquishSemaphoreInfo(memory_semaphore);
-    }
-  AcquireSemaphoreInfo(&memory_semaphore);
+      //    RelinquishSemaphoreInfo(memory_semaphore);
+      //  }
+      // AcquireSemaphoreInfo(&memory_semaphore);
   memory=AcquireBlock(size == 0 ? 1UL : size);
   if (memory == (void *) NULL)
     {
@@ -476,7 +477,10 @@
     else
       (void) UnmapBlob(memory_info.segments[i]->allocation,
         memory_info.segments[i]->length);
+  // MVEE PATCH
+  AcquireSemaphoreInfo(&memory_semaphore);
   free_segments=(DataSegmentInfo *) NULL;
+  RelinquishSemaphoreInfo(memory_semaphore);
   (void) ResetMagickMemory(&memory_info,0,sizeof(memory_info));
   memory_semaphore=DestroySemaphoreInfo(memory_semaphore);
 #endif
