diff --git a/MagickCore/annotate.c b/MagickCore/annotate.c
index 3f7fc5d..d945cca 100644
--- a/MagickCore/annotate.c
+++ b/MagickCore/annotate.c
@@ -145,7 +145,7 @@
 */
 MagickPrivate MagickBooleanType AnnotateComponentGenesis(void)
 {
-  AcquireSemaphoreInfo(&annotate_semaphore);
+  annotate_semaphore=AcquireSemaphoreInfo();
   return(MagickTrue);
 }
 
@@ -170,8 +170,8 @@
 MagickPrivate void AnnotateComponentTerminus(void)
 {
   if (annotate_semaphore == (SemaphoreInfo *) NULL)
-    AcquireSemaphoreInfo(&annotate_semaphore);
-  DestroySemaphoreInfo(&annotate_semaphore);
+    annotate_semaphore=AcquireSemaphoreInfo();
+  RelinquishSemaphoreInfo(&annotate_semaphore);
 }
 
 /*
@@ -1904,7 +1904,7 @@
     status;
 
   if (annotate_semaphore == (SemaphoreInfo *) NULL)
-    AcquireSemaphoreInfo(&annotate_semaphore);
+    annotate_semaphore=AcquireSemaphoreInfo();
   LockSemaphoreInfo(annotate_semaphore);
   status=XRenderImage(image,draw_info,offset,metrics,exception);
   UnlockSemaphoreInfo(annotate_semaphore);
diff --git a/MagickCore/blob.c b/MagickCore/blob.c
index a034e4a..7aaccba 100644
--- a/MagickCore/blob.c
+++ b/MagickCore/blob.c
@@ -652,7 +652,7 @@
       RelinquishMagickResource(MapResource,image->blob->length);
     }
   if (image->blob->semaphore != (SemaphoreInfo *) NULL)
-    DestroySemaphoreInfo(&image->blob->semaphore);
+    RelinquishSemaphoreInfo(&image->blob->semaphore);
   image->blob->signature=(~MagickSignature);
   image->blob=(BlobInfo *) RelinquishMagickMemory(image->blob);
 }
@@ -1283,7 +1283,7 @@
   blob_info->properties.st_ctime=time((time_t *) NULL);
   blob_info->debug=IsEventLogging();
   blob_info->reference_count=1;
-  blob_info->semaphore=AllocateSemaphoreInfo();
+  blob_info->semaphore=AcquireSemaphoreInfo();
   blob_info->signature=MagickSignature;
 }
 
diff --git a/MagickCore/cache.c b/MagickCore/cache.c
index d097c69..290f054 100644
--- a/MagickCore/cache.c
+++ b/MagickCore/cache.c
@@ -201,9 +201,9 @@
       cache_info->synchronize=IsStringTrue(synchronize);
       synchronize=DestroyString(synchronize);
     }
-  cache_info->semaphore=AllocateSemaphoreInfo();
+  cache_info->semaphore=AcquireSemaphoreInfo();
   cache_info->reference_count=1;
-  cache_info->file_semaphore=AllocateSemaphoreInfo();
+  cache_info->file_semaphore=AcquireSemaphoreInfo();
   cache_info->debug=IsEventLogging();
   cache_info->signature=MagickSignature;
   return((Cache ) cache_info);
@@ -324,7 +324,7 @@
 */
 MagickPrivate MagickBooleanType CacheComponentGenesis(void)
 {
-  AcquireSemaphoreInfo(&cache_semaphore);
+  cache_semaphore=AcquireSemaphoreInfo();
   return(MagickTrue);
 }
 
@@ -349,11 +349,11 @@
 MagickPrivate void CacheComponentTerminus(void)
 {
   if (cache_semaphore == (SemaphoreInfo *) NULL)
-    AcquireSemaphoreInfo(&cache_semaphore);
+    cache_semaphore=AcquireSemaphoreInfo();
   LockSemaphoreInfo(cache_semaphore);
   instantiate_cache=MagickFalse;
   UnlockSemaphoreInfo(cache_semaphore);
-  DestroySemaphoreInfo(&cache_semaphore);
+  RelinquishSemaphoreInfo(&cache_semaphore);
 }
 
 /*
@@ -911,9 +911,9 @@
   if (cache_info->random_info != (RandomInfo *) NULL)
     cache_info->random_info=DestroyRandomInfo(cache_info->random_info);
   if (cache_info->file_semaphore != (SemaphoreInfo *) NULL)
-    DestroySemaphoreInfo(&cache_info->file_semaphore);
+    RelinquishSemaphoreInfo(&cache_info->file_semaphore);
   if (cache_info->semaphore != (SemaphoreInfo *) NULL)
-    DestroySemaphoreInfo(&cache_info->semaphore);
+    RelinquishSemaphoreInfo(&cache_info->semaphore);
   cache_info->signature=(~MagickSignature);
   cache_info=(CacheInfo *) RelinquishMagickMemory(cache_info);
   cache=(Cache) NULL;
@@ -1512,7 +1512,7 @@
             Clone pixel cache.
           */
           clone_image=(*image);
-          clone_image.semaphore=AllocateSemaphoreInfo();
+          clone_image.semaphore=AcquireSemaphoreInfo();
           clone_image.reference_count=1;
           clone_image.cache=ClonePixelCache(cache_info);
           clone_info=(CacheInfo *) clone_image.cache;
@@ -1530,7 +1530,7 @@
                   image->cache=clone_image.cache;
                 }
             }
-          DestroySemaphoreInfo(&clone_image.semaphore);
+          RelinquishSemaphoreInfo(&clone_image.semaphore);
         }
       UnlockSemaphoreInfo(cache_info->semaphore);
     }
diff --git a/MagickCore/coder.c b/MagickCore/coder.c
index 9ab4d95..2095db0 100644
--- a/MagickCore/coder.c
+++ b/MagickCore/coder.c
@@ -265,7 +265,7 @@
 */
 MagickPrivate MagickBooleanType CoderComponentGenesis(void)
 {
-  AcquireSemaphoreInfo(&coder_semaphore);
+  coder_semaphore=AcquireSemaphoreInfo();
   return(MagickTrue);
 }
 
@@ -290,13 +290,13 @@
 MagickPrivate void CoderComponentTerminus(void)
 {
   if (coder_semaphore == (SemaphoreInfo *) NULL)
-    AcquireSemaphoreInfo(&coder_semaphore);
+    coder_semaphore=AcquireSemaphoreInfo();
   LockSemaphoreInfo(coder_semaphore);
   if (coder_list != (SplayTreeInfo *) NULL)
     coder_list=DestroySplayTree(coder_list);
   instantiate_coder=MagickFalse;
   UnlockSemaphoreInfo(coder_semaphore);
-  DestroySemaphoreInfo(&coder_semaphore);
+  RelinquishSemaphoreInfo(&coder_semaphore);
 }
 
 /*
@@ -542,7 +542,7 @@
       (instantiate_coder == MagickFalse))
     {
       if (coder_semaphore == (SemaphoreInfo *) NULL)
-        AcquireSemaphoreInfo(&coder_semaphore);
+        coder_semaphore=AcquireSemaphoreInfo();
       LockSemaphoreInfo(coder_semaphore);
       if ((coder_list == (SplayTreeInfo *) NULL) &&
           (instantiate_coder == MagickFalse))
diff --git a/MagickCore/color.c b/MagickCore/color.c
index 6a45629..08fbed7 100644
--- a/MagickCore/color.c
+++ b/MagickCore/color.c
@@ -820,7 +820,7 @@
 */
 MagickPrivate MagickBooleanType ColorComponentGenesis(void)
 {
-  AcquireSemaphoreInfo(&color_semaphore);
+  color_semaphore=AcquireSemaphoreInfo();
   return(MagickTrue);
 }
 
@@ -863,13 +863,13 @@
 MagickPrivate void ColorComponentTerminus(void)
 {
   if (color_semaphore == (SemaphoreInfo *) NULL)
-    AcquireSemaphoreInfo(&color_semaphore);
+    color_semaphore=AcquireSemaphoreInfo();
   LockSemaphoreInfo(color_semaphore);
   if (color_list != (LinkedListInfo *) NULL)
     color_list=DestroyLinkedList(color_list,DestroyColorElement);
   instantiate_color=MagickFalse;
   UnlockSemaphoreInfo(color_semaphore);
-  DestroySemaphoreInfo(&color_semaphore);
+  RelinquishSemaphoreInfo(&color_semaphore);
 }
 
 /*
@@ -1519,7 +1519,7 @@
       IfMagickFalse(instantiate_color))
     {
       if (color_semaphore == (SemaphoreInfo *) NULL)
-        AcquireSemaphoreInfo(&color_semaphore);
+        color_semaphore=AcquireSemaphoreInfo();
       LockSemaphoreInfo(color_semaphore);
       if ((color_list == (LinkedListInfo *) NULL) &&
           IfMagickFalse(instantiate_color))
diff --git a/MagickCore/configure.c b/MagickCore/configure.c
index 1b8747e..028ea79 100644
--- a/MagickCore/configure.c
+++ b/MagickCore/configure.c
@@ -142,7 +142,7 @@
 */
 MagickPrivate MagickBooleanType ConfigureComponentGenesis(void)
 {
-  AcquireSemaphoreInfo(&configure_semaphore);
+  configure_semaphore=AcquireSemaphoreInfo();
   return(MagickTrue);
 }
 
@@ -187,14 +187,14 @@
 MagickPrivate void ConfigureComponentTerminus(void)
 {
   if (configure_semaphore == (SemaphoreInfo *) NULL)
-    AcquireSemaphoreInfo(&configure_semaphore);
+    configure_semaphore=AcquireSemaphoreInfo();
   LockSemaphoreInfo(configure_semaphore);
   if (configure_list != (LinkedListInfo *) NULL)
     configure_list=DestroyLinkedList(configure_list,DestroyConfigureElement);
   configure_list=(LinkedListInfo *) NULL;
   instantiate_configure=MagickFalse;
   UnlockSemaphoreInfo(configure_semaphore);
-  DestroySemaphoreInfo(&configure_semaphore);
+  RelinquishSemaphoreInfo(&configure_semaphore);
 }
 
 /*
@@ -906,7 +906,7 @@
       (instantiate_configure == MagickFalse))
     {
       if (configure_semaphore == (SemaphoreInfo *) NULL)
-        AcquireSemaphoreInfo(&configure_semaphore);
+        configure_semaphore=AcquireSemaphoreInfo();
       LockSemaphoreInfo(configure_semaphore);
       if ((configure_list == (LinkedListInfo *) NULL) &&
           (instantiate_configure == MagickFalse))
diff --git a/MagickCore/constitute.c b/MagickCore/constitute.c
index 77a518b..28a2315 100644
--- a/MagickCore/constitute.c
+++ b/MagickCore/constitute.c
@@ -103,7 +103,7 @@
 */
 MagickPrivate MagickBooleanType ConstituteComponentGenesis(void)
 {
-  AcquireSemaphoreInfo(&constitute_semaphore);
+  constitute_semaphore=AcquireSemaphoreInfo();
   return(MagickTrue);
 }
 
@@ -128,8 +128,8 @@
 MagickPrivate void ConstituteComponentTerminus(void)
 {
   if (constitute_semaphore == (SemaphoreInfo *) NULL)
-    AcquireSemaphoreInfo(&constitute_semaphore);
-  DestroySemaphoreInfo(&constitute_semaphore);
+    constitute_semaphore=AcquireSemaphoreInfo();
+  RelinquishSemaphoreInfo(&constitute_semaphore);
 }
 
 /*
@@ -528,7 +528,7 @@
     }
   image=NewImageList();
   if (constitute_semaphore == (SemaphoreInfo *) NULL)
-    AcquireSemaphoreInfo(&constitute_semaphore);
+    constitute_semaphore=AcquireSemaphoreInfo();
   if ((magick_info == (const MagickInfo *) NULL) ||
       (GetImageDecoder(magick_info) == (DecodeImageHandler *) NULL))
     {
@@ -1142,7 +1142,7 @@
         }
     }
   if (constitute_semaphore == (SemaphoreInfo *) NULL)
-    AcquireSemaphoreInfo(&constitute_semaphore);
+    constitute_semaphore=AcquireSemaphoreInfo();
   if ((magick_info != (const MagickInfo *) NULL) &&
       (GetImageEncoder(magick_info) != (EncodeImageHandler *) NULL))
     {
diff --git a/MagickCore/delegate.c b/MagickCore/delegate.c
index cce4df4..a7d7a63 100644
--- a/MagickCore/delegate.c
+++ b/MagickCore/delegate.c
@@ -163,7 +163,7 @@
 */
 MagickPrivate MagickBooleanType DelegateComponentGenesis(void)
 {
-  AcquireSemaphoreInfo(&delegate_semaphore);
+  delegate_semaphore=AcquireSemaphoreInfo();
   return(MagickTrue);
 }
 
@@ -207,13 +207,13 @@
 MagickPrivate void DelegateComponentTerminus(void)
 {
   if (delegate_semaphore == (SemaphoreInfo *) NULL)
-    AcquireSemaphoreInfo(&delegate_semaphore);
+    delegate_semaphore=AcquireSemaphoreInfo();
   LockSemaphoreInfo(delegate_semaphore);
   if (delegate_list != (LinkedListInfo *) NULL)
     delegate_list=DestroyLinkedList(delegate_list,DestroyDelegate);
   instantiate_delegate=MagickFalse;
   UnlockSemaphoreInfo(delegate_semaphore);
-  DestroySemaphoreInfo(&delegate_semaphore);
+  RelinquishSemaphoreInfo(&delegate_semaphore);
 }
 
 /*
@@ -713,7 +713,7 @@
       IfMagickFalse(instantiate_delegate))
     {
       if (delegate_semaphore == (SemaphoreInfo *) NULL)
-        AcquireSemaphoreInfo(&delegate_semaphore);
+        delegate_semaphore=AcquireSemaphoreInfo();
       LockSemaphoreInfo(delegate_semaphore);
       if ((delegate_list == (LinkedListInfo *) NULL) &&
           IfMagickFalse(instantiate_delegate))
diff --git a/MagickCore/exception.c b/MagickCore/exception.c
index f034d26..f08afba 100644
--- a/MagickCore/exception.c
+++ b/MagickCore/exception.c
@@ -414,7 +414,7 @@
   assert(exception != (ExceptionInfo *) NULL);
   assert(exception->signature == MagickSignature);
   if (exception->semaphore == (SemaphoreInfo *) NULL)
-    AcquireSemaphoreInfo(&exception->semaphore);
+    exception->semaphore=AcquireSemaphoreInfo();
   LockSemaphoreInfo(exception->semaphore);
   exception->severity=UndefinedException;
   if (exception->exceptions != (void *) NULL)
@@ -424,7 +424,7 @@
   if (exception->relinquish != MagickFalse)
     exception->signature=(~MagickSignature);
   UnlockSemaphoreInfo(exception->semaphore);
-  DestroySemaphoreInfo(&exception->semaphore);
+  RelinquishSemaphoreInfo(&exception->semaphore);
   if (relinquish != MagickFalse)
     exception=(ExceptionInfo *) RelinquishMagickMemory(exception);
   return(exception);
@@ -458,7 +458,7 @@
   (void) ResetMagickMemory(exception,0,sizeof(*exception));
   exception->severity=UndefinedException;
   exception->exceptions=(void *) NewLinkedList(0);
-  exception->semaphore=AllocateSemaphoreInfo();
+  exception->semaphore=AcquireSemaphoreInfo();
   exception->signature=MagickSignature;
 }
 
diff --git a/MagickCore/hashmap.c b/MagickCore/hashmap.c
index 31b855c..28bbad6 100644
--- a/MagickCore/hashmap.c
+++ b/MagickCore/hashmap.c
@@ -358,7 +358,7 @@
     hashmap_info->map);
   hashmap_info->signature=(~MagickSignature);
   UnlockSemaphoreInfo(hashmap_info->semaphore);
-  DestroySemaphoreInfo(&hashmap_info->semaphore);
+  RelinquishSemaphoreInfo(&hashmap_info->semaphore);
   hashmap_info=(HashmapInfo *) RelinquishMagickMemory(hashmap_info);
   return(hashmap_info);
 }
@@ -411,7 +411,7 @@
   }
   list_info->signature=(~MagickSignature);
   UnlockSemaphoreInfo(list_info->semaphore);
-  DestroySemaphoreInfo(&list_info->semaphore);
+  RelinquishSemaphoreInfo(&list_info->semaphore);
   list_info=(LinkedListInfo *) RelinquishMagickMemory(list_info);
   return(list_info);
 }
@@ -1326,7 +1326,7 @@
     ThrowFatalException(ResourceLimitFatalError,"MemoryAllocationFailed");
   (void) ResetMagickMemory(hashmap_info->map,0,(size_t) capacity*
     sizeof(*hashmap_info->map));
-  hashmap_info->semaphore=AllocateSemaphoreInfo();
+  hashmap_info->semaphore=AcquireSemaphoreInfo();
   hashmap_info->signature=MagickSignature;
   return(hashmap_info);
 }
@@ -1368,7 +1368,7 @@
   list_info->head=(ElementInfo *) NULL;
   list_info->tail=(ElementInfo *) NULL;
   list_info->next=(ElementInfo *) NULL;
-  list_info->semaphore=AllocateSemaphoreInfo();
+  list_info->semaphore=AcquireSemaphoreInfo();
   list_info->signature=MagickSignature;
   return(list_info);
 }
@@ -1474,7 +1474,7 @@
     }
     list_info->signature=(~MagickSignature);
     UnlockSemaphoreInfo(list_info->semaphore);
-    DestroySemaphoreInfo(&list_info->semaphore);
+    RelinquishSemaphoreInfo(&list_info->semaphore);
     list_info=(LinkedListInfo *) RelinquishMagickMemory(list_info);
   }
   hashmap_info->map=(LinkedListInfo **) RelinquishMagickMemory(
diff --git a/MagickCore/image.c b/MagickCore/image.c
index 29f1956..b583397 100644
--- a/MagickCore/image.c
+++ b/MagickCore/image.c
@@ -208,7 +208,7 @@
   image->timestamp=time((time_t *) NULL);
   image->debug=IsEventLogging();
   image->reference_count=1;
-  image->semaphore=AllocateSemaphoreInfo();
+  image->semaphore=AcquireSemaphoreInfo();
   image->signature=MagickSignature;
   if (image_info == (ImageInfo *) NULL)
     return(image);
@@ -873,7 +873,7 @@
     }
   clone_image->ping=image->ping;
   clone_image->debug=IsEventLogging();
-  clone_image->semaphore=AllocateSemaphoreInfo();
+  clone_image->semaphore=AcquireSemaphoreInfo();
   if ((columns == 0) && (rows == 0))
     {
       if (image->montage != (char *) NULL)
@@ -1052,7 +1052,7 @@
     image->ascii85=(Ascii85Info *) RelinquishMagickMemory(image->ascii85);
   DestroyBlob(image);
   if (image->semaphore != (SemaphoreInfo *) NULL)
-    DestroySemaphoreInfo(&image->semaphore);
+    RelinquishSemaphoreInfo(&image->semaphore);
   image->signature=(~MagickSignature);
   image=(Image *) RelinquishMagickMemory(image);
   return(image);
diff --git a/MagickCore/locale.c b/MagickCore/locale.c
index 5e92cc1..7033e1c 100644
--- a/MagickCore/locale.c
+++ b/MagickCore/locale.c
@@ -817,7 +817,7 @@
       (instantiate_locale == MagickFalse))
     {
       if (locale_semaphore == (SemaphoreInfo *) NULL)
-        AcquireSemaphoreInfo(&locale_semaphore);
+        locale_semaphore=AcquireSemaphoreInfo();
       LockSemaphoreInfo(locale_semaphore);
       if ((locale_list == (SplayTreeInfo *) NULL) &&
           (instantiate_locale == MagickFalse))
@@ -1392,7 +1392,7 @@
 */
 MagickPrivate MagickBooleanType LocaleComponentGenesis(void)
 {
-  AcquireSemaphoreInfo(&locale_semaphore);
+  locale_semaphore=AcquireSemaphoreInfo();
   return(MagickTrue);
 }
 
@@ -1417,7 +1417,7 @@
 MagickPrivate void LocaleComponentTerminus(void)
 {
   if (locale_semaphore == (SemaphoreInfo *) NULL)
-    AcquireSemaphoreInfo(&locale_semaphore);
+    locale_semaphore=AcquireSemaphoreInfo();
   LockSemaphoreInfo(locale_semaphore);
   if (locale_list != (SplayTreeInfo *) NULL)
     locale_list=DestroySplayTree(locale_list);
@@ -1426,5 +1426,5 @@
 #endif
   instantiate_locale=MagickFalse;
   UnlockSemaphoreInfo(locale_semaphore);
-  DestroySemaphoreInfo(&locale_semaphore);
+  RelinquishSemaphoreInfo(&locale_semaphore);
 }
diff --git a/MagickCore/log.c b/MagickCore/log.c
index a956130..60186eb 100644
--- a/MagickCore/log.c
+++ b/MagickCore/log.c
@@ -537,7 +537,7 @@
   if ((log_list == (LinkedListInfo *) NULL) && (instantiate_log == MagickFalse))
     {
       if (log_semaphore == (SemaphoreInfo *) NULL)
-        AcquireSemaphoreInfo(&log_semaphore);
+        log_semaphore=AcquireSemaphoreInfo();
       LockSemaphoreInfo(log_semaphore);
       if ((log_list == (LinkedListInfo *) NULL) &&
           (instantiate_log == MagickFalse))
@@ -708,7 +708,7 @@
   ExceptionInfo
     *exception;
 
-  AcquireSemaphoreInfo(&log_semaphore);
+  log_semaphore=AcquireSemaphoreInfo();
   exception=AcquireExceptionInfo();
   (void) GetLogInfo("*",exception);
   exception=DestroyExceptionInfo(exception);
@@ -759,13 +759,13 @@
 MagickPrivate void LogComponentTerminus(void)
 {
   if (log_semaphore == (SemaphoreInfo *) NULL)
-    AcquireSemaphoreInfo(&log_semaphore);
+    log_semaphore=AcquireSemaphoreInfo();
   LockSemaphoreInfo(log_semaphore);
   if (log_list != (LinkedListInfo *) NULL)
     log_list=DestroyLinkedList(log_list,DestroyLogElement);
   instantiate_log=MagickFalse;
   UnlockSemaphoreInfo(log_semaphore);
-  DestroySemaphoreInfo(&log_semaphore);
+  RelinquishSemaphoreInfo(&log_semaphore);
 }
 
 /*
diff --git a/MagickCore/magic.c b/MagickCore/magic.c
index c4b0a2e..0ec0b37 100644
--- a/MagickCore/magic.c
+++ b/MagickCore/magic.c
@@ -533,7 +533,7 @@
       (instantiate_magic == MagickFalse))
     {
       if (magic_semaphore == (SemaphoreInfo *) NULL)
-        AcquireSemaphoreInfo(&magic_semaphore);
+        magic_semaphore=AcquireSemaphoreInfo();
       LockSemaphoreInfo(magic_semaphore);
       if ((magic_list == (LinkedListInfo *) NULL) &&
           (instantiate_magic == MagickFalse))
@@ -1024,7 +1024,7 @@
 */
 MagickPrivate MagickBooleanType MagicComponentGenesis(void)
 {
-  AcquireSemaphoreInfo(&magic_semaphore);
+  magic_semaphore=AcquireSemaphoreInfo();
   return(MagickTrue);
 }
 
@@ -1071,11 +1071,11 @@
 MagickPrivate void MagicComponentTerminus(void)
 {
   if (magic_semaphore == (SemaphoreInfo *) NULL)
-    AcquireSemaphoreInfo(&magic_semaphore);
+    magic_semaphore=AcquireSemaphoreInfo();
   LockSemaphoreInfo(magic_semaphore);
   if (magic_list != (LinkedListInfo *) NULL)
     magic_list=DestroyLinkedList(magic_list,DestroyMagicElement);
   instantiate_magic=MagickFalse;
   UnlockSemaphoreInfo(magic_semaphore);
-  DestroySemaphoreInfo(&magic_semaphore);
+  RelinquishSemaphoreInfo(&magic_semaphore);
 }
diff --git a/MagickCore/magick.c b/MagickCore/magick.c
index 70e4e48..5dba4c6 100644
--- a/MagickCore/magick.c
+++ b/MagickCore/magick.c
@@ -844,7 +844,7 @@
       (instantiate_magick == MagickFalse))
     {
       if (magick_semaphore == (SemaphoreInfo *) NULL)
-        AcquireSemaphoreInfo(&magick_semaphore);
+        magick_semaphore=AcquireSemaphoreInfo();
       LockSemaphoreInfo(magick_semaphore);
       if ((magick_list == (SplayTreeInfo *) NULL) &&
           (instantiate_magick == MagickFalse))
@@ -1075,7 +1075,7 @@
 */
 MagickPrivate MagickBooleanType MagickComponentGenesis(void)
 {
-  AcquireSemaphoreInfo(&magick_semaphore);
+  magick_semaphore=AcquireSemaphoreInfo();
   return(MagickTrue);
 }
 
@@ -1100,13 +1100,13 @@
 MagickPrivate void MagickComponentTerminus(void)
 {
   if (magick_semaphore == (SemaphoreInfo *) NULL)
-    AcquireSemaphoreInfo(&magick_semaphore);
+    magick_semaphore=AcquireSemaphoreInfo();
   LockSemaphoreInfo(magick_semaphore);
   if (magick_list != (SplayTreeInfo *) NULL)
     magick_list=DestroySplayTree(magick_list);
   instantiate_magick=MagickFalse;
   UnlockSemaphoreInfo(magick_semaphore);
-  DestroySemaphoreInfo(&magick_semaphore);
+  RelinquishSemaphoreInfo(&magick_semaphore);
 }
 
 /*
diff --git a/MagickCore/memory.c b/MagickCore/memory.c
index d90fa4b..119f5f6 100644
--- a/MagickCore/memory.c
+++ b/MagickCore/memory.c
@@ -463,7 +463,7 @@
   memory=memory_methods.acquire_memory_handler(size == 0 ? 1UL : size);
 #else
   if (memory_semaphore == (SemaphoreInfo *) NULL)
-    AcquireSemaphoreInfo(&memory_semaphore);
+    memory_semaphore=AcquireSemaphoreInfo();
   if (free_segments == (DataSegmentInfo *) NULL)
     {
       LockSemaphoreInfo(memory_semaphore);
@@ -724,7 +724,7 @@
     i;
 
   if (memory_semaphore == (SemaphoreInfo *) NULL)
-    AcquireSemaphoreInfo(&memory_semaphore);
+    memory_semaphore=AcquireSemaphoreInfo();
   LockSemaphoreInfo(memory_semaphore);
   UnlockSemaphoreInfo(memory_semaphore);
   for (i=0; i < (ssize_t) memory_pool.number_segments; i++)
@@ -736,7 +736,7 @@
         memory_pool.segments[i]->length);
   free_segments=(DataSegmentInfo *) NULL;
   (void) ResetMagickMemory(&memory_pool,0,sizeof(memory_pool));
-  DestroySemaphoreInfo(&memory_semaphore);
+  RelinquishSemaphoreInfo(&memory_semaphore);
 #endif
 }
 
diff --git a/MagickCore/mime.c b/MagickCore/mime.c
index 9a24a19..fed83d9 100644
--- a/MagickCore/mime.c
+++ b/MagickCore/mime.c
@@ -608,7 +608,7 @@
       (instantiate_mime == MagickFalse))
     {
       if (mime_semaphore == (SemaphoreInfo *) NULL)
-        AcquireSemaphoreInfo(&mime_semaphore);
+        mime_semaphore=AcquireSemaphoreInfo();
       LockSemaphoreInfo(mime_semaphore);
       if ((mime_list == (LinkedListInfo *) NULL) &&
           (instantiate_mime == MagickFalse))
@@ -1056,7 +1056,7 @@
 */
 MagickPrivate MagickBooleanType MimeComponentGenesis(void)
 {
-  AcquireSemaphoreInfo(&mime_semaphore);
+  mime_semaphore=AcquireSemaphoreInfo();
   return(MagickTrue);
 }
 
@@ -1102,11 +1102,11 @@
 MagickPrivate void MimeComponentTerminus(void)
 {
   if (mime_semaphore == (SemaphoreInfo *) NULL)
-    AcquireSemaphoreInfo(&mime_semaphore);
+    mime_semaphore=AcquireSemaphoreInfo();
   LockSemaphoreInfo(mime_semaphore);
   if (mime_list != (LinkedListInfo *) NULL)
     mime_list=DestroyLinkedList(mime_list,DestroyMimeElement);
   instantiate_mime=MagickFalse;
   UnlockSemaphoreInfo(mime_semaphore);
-  DestroySemaphoreInfo(&mime_semaphore);
+  RelinquishSemaphoreInfo(&mime_semaphore);
 }
diff --git a/MagickCore/module.c b/MagickCore/module.c
index e6fe730..9a18212 100644
--- a/MagickCore/module.c
+++ b/MagickCore/module.c
@@ -869,7 +869,7 @@
       (instantiate_module == MagickFalse))
     {
       if (module_semaphore == (SemaphoreInfo *) NULL)
-        AcquireSemaphoreInfo(&module_semaphore);
+        module_semaphore=AcquireSemaphoreInfo();
       LockSemaphoreInfo(module_semaphore);
       if ((module_list == (SplayTreeInfo *) NULL) &&
           (instantiate_module == MagickFalse))
@@ -1164,7 +1164,7 @@
   MagickBooleanType
     status;
 
-  AcquireSemaphoreInfo(&module_semaphore);
+  module_semaphore=AcquireSemaphoreInfo();
   exception=AcquireExceptionInfo();
   status=InitializeModuleList(exception);
   exception=DestroyExceptionInfo(exception);
@@ -1192,9 +1192,9 @@
 MagickPrivate void ModuleComponentTerminus(void)
 {
   if (module_semaphore == (SemaphoreInfo *) NULL)
-    AcquireSemaphoreInfo(&module_semaphore);
+    module_semaphore=AcquireSemaphoreInfo();
   DestroyModuleList();
-  DestroySemaphoreInfo(&module_semaphore);
+  RelinquishSemaphoreInfo(&module_semaphore);
 }
 
 /*
diff --git a/MagickCore/opencl.c b/MagickCore/opencl.c
index e9cd08a..c9614d0 100644
--- a/MagickCore/opencl.c
+++ b/MagickCore/opencl.c
@@ -126,7 +126,7 @@
   if (clEnv != NULL)
   {
     memset(clEnv, 0, sizeof(struct _MagickCLEnv));
-    AcquireSemaphoreInfo(&clEnv->lock);
+    clEnv->lock=AcquireSemaphoreInfo();
   }
   return clEnv;
 }
@@ -203,7 +203,7 @@
   {
     if (defaultCLEnvLock == NULL)
     {
-      AcquireSemaphoreInfo(&defaultCLEnvLock);
+      defaultCLEnvLock=AcquireSemaphoreInfo();
     }
     LockSemaphoreInfo(defaultCLEnvLock);
     defaultCLEnv = AcquireMagickOpenCLEnv();
@@ -215,7 +215,7 @@
 static void LockDefaultOpenCLEnv() {
   if (defaultCLEnvLock == NULL)
   {
-    AcquireSemaphoreInfo(&defaultCLEnvLock);
+    defaultCLEnvLock=AcquireSemaphoreInfo();
   }
   LockSemaphoreInfo(defaultCLEnvLock);
 }
@@ -223,7 +223,7 @@
 static void UnlockDefaultOpenCLEnv() {
   if (defaultCLEnvLock == NULL)
   {
-    AcquireSemaphoreInfo(&defaultCLEnvLock);
+    defaultCLEnvLock=AcquireSemaphoreInfo();
   }
   else
     UnlockSemaphoreInfo(defaultCLEnvLock);
@@ -2543,7 +2543,7 @@
   if (openclCachedFilesDirectory == NULL) {
     if (openclCachedFilesDirectoryLock == NULL)
     {
-      AcquireSemaphoreInfo(&openclCachedFilesDirectoryLock);
+      openclCachedFilesDirectoryLock=AcquireSemaphoreInfo();
     }
     LockSemaphoreInfo(openclCachedFilesDirectoryLock);
     if (openclCachedFilesDirectory == NULL) {
diff --git a/MagickCore/policy.c b/MagickCore/policy.c
index c531516..e301977 100644
--- a/MagickCore/policy.c
+++ b/MagickCore/policy.c
@@ -429,7 +429,7 @@
       (instantiate_policy == MagickFalse))
     {
       if (policy_semaphore == (SemaphoreInfo *) NULL)
-        AcquireSemaphoreInfo(&policy_semaphore);
+        policy_semaphore=AcquireSemaphoreInfo();
       LockSemaphoreInfo(policy_semaphore);
       if ((policy_list == (LinkedListInfo *) NULL) &&
           (instantiate_policy == MagickFalse))
@@ -969,7 +969,7 @@
 */
 MagickPrivate MagickBooleanType PolicyComponentGenesis(void)
 {
-  AcquireSemaphoreInfo(&policy_semaphore);
+  policy_semaphore=AcquireSemaphoreInfo();
   return(MagickTrue);
 }
 
@@ -1016,11 +1016,11 @@
 MagickPrivate void PolicyComponentTerminus(void)
 {
   if (policy_semaphore == (SemaphoreInfo *) NULL)
-    AcquireSemaphoreInfo(&policy_semaphore);
+    policy_semaphore=AcquireSemaphoreInfo();
   LockSemaphoreInfo(policy_semaphore);
   if (policy_list != (LinkedListInfo *) NULL)
     policy_list=DestroyLinkedList(policy_list,DestroyPolicyElement);
   instantiate_policy=MagickFalse;
   UnlockSemaphoreInfo(policy_semaphore);
-  DestroySemaphoreInfo(&policy_semaphore);
+  RelinquishSemaphoreInfo(&policy_semaphore);
 }
diff --git a/MagickCore/quantum.c b/MagickCore/quantum.c
index 386474d..914e4ae 100644
--- a/MagickCore/quantum.c
+++ b/MagickCore/quantum.c
@@ -218,7 +218,7 @@
   if (quantum_info->pixels != (unsigned char **) NULL)
     DestroyQuantumPixels(quantum_info);
   if (quantum_info->semaphore != (SemaphoreInfo *) NULL)
-    DestroySemaphoreInfo(&quantum_info->semaphore);
+    RelinquishSemaphoreInfo(&quantum_info->semaphore);
   quantum_info->signature=(~MagickSignature);
   quantum_info=(QuantumInfo *) RelinquishMagickMemory(quantum_info);
   return(quantum_info);
@@ -421,7 +421,7 @@
   quantum_info->maximum=1.0;
   quantum_info->scale=QuantumRange;
   quantum_info->pack=MagickTrue;
-  quantum_info->semaphore=AllocateSemaphoreInfo();
+  quantum_info->semaphore=AcquireSemaphoreInfo();
   quantum_info->signature=MagickSignature;
   if (image_info == (const ImageInfo *) NULL)
     return;
diff --git a/MagickCore/random.c b/MagickCore/random.c
index 0ab6571..b999072 100644
--- a/MagickCore/random.c
+++ b/MagickCore/random.c
@@ -192,7 +192,7 @@
   random_info->secret_key=secret_key;
   random_info->protocol_major=RandomProtocolMajorVersion;
   random_info->protocol_minor=RandomProtocolMinorVersion;
-  random_info->semaphore=AllocateSemaphoreInfo();
+  random_info->semaphore=AcquireSemaphoreInfo();
   random_info->timestamp=(ssize_t) time(0);
   random_info->signature=MagickSignature;
   /*
@@ -292,7 +292,7 @@
   (void) ResetMagickMemory(random_info->seed,0,sizeof(*random_info->seed));
   random_info->signature=(~MagickSignature);
   UnlockSemaphoreInfo(random_info->semaphore);
-  DestroySemaphoreInfo(&random_info->semaphore);
+  RelinquishSemaphoreInfo(&random_info->semaphore);
   random_info=(RandomInfo *) RelinquishMagickMemory(random_info);
   return(random_info);
 }
@@ -737,7 +737,7 @@
 */
 MagickPrivate MagickBooleanType RandomComponentGenesis(void)
 {
-  AcquireSemaphoreInfo(&random_semaphore);
+  random_semaphore=AcquireSemaphoreInfo();
   return(MagickTrue);
 }
 
@@ -762,8 +762,8 @@
 MagickPrivate void RandomComponentTerminus(void)
 {
   if (random_semaphore == (SemaphoreInfo *) NULL)
-    AcquireSemaphoreInfo(&random_semaphore);
-  DestroySemaphoreInfo(&random_semaphore);
+    random_semaphore=AcquireSemaphoreInfo();
+  RelinquishSemaphoreInfo(&random_semaphore);
 }
 
 /*
diff --git a/MagickCore/registry.c b/MagickCore/registry.c
index 0c39f59..f0592b7 100644
--- a/MagickCore/registry.c
+++ b/MagickCore/registry.c
@@ -300,7 +300,7 @@
 */
 MagickPrivate MagickBooleanType RegistryComponentGenesis(void)
 {
-  AcquireSemaphoreInfo(&registry_semaphore);
+  registry_semaphore=AcquireSemaphoreInfo();
   return(MagickTrue);
 }
 
@@ -325,7 +325,7 @@
 MagickPrivate void RegistryComponentTerminus(void)
 {
   if (registry_semaphore == (SemaphoreInfo *) NULL)
-    AcquireSemaphoreInfo(&registry_semaphore);
+    registry_semaphore=AcquireSemaphoreInfo();
   LockSemaphoreInfo(registry_semaphore);
   if (IsEventLogging() != MagickFalse)
     (void) LogMagickEvent(TraceEvent,GetMagickModule(),"...");
@@ -333,7 +333,7 @@
     registry=DestroySplayTree(registry);
   instantiate_registry=MagickFalse;
   UnlockSemaphoreInfo(registry_semaphore);
-  DestroySemaphoreInfo(&registry_semaphore);
+  RelinquishSemaphoreInfo(&registry_semaphore);
 }
 
 /*
@@ -528,7 +528,7 @@
       (instantiate_registry == MagickFalse))
     {
       if (registry_semaphore == (SemaphoreInfo *) NULL)
-        AcquireSemaphoreInfo(&registry_semaphore);
+        registry_semaphore=AcquireSemaphoreInfo();
       LockSemaphoreInfo(registry_semaphore);
       if ((registry == (SplayTreeInfo *) NULL) &&
           (instantiate_registry == MagickFalse))
diff --git a/MagickCore/resource.c b/MagickCore/resource.c
index 1e95728..9f99b64 100644
--- a/MagickCore/resource.c
+++ b/MagickCore/resource.c
@@ -167,7 +167,7 @@
   status=MagickFalse;
   (void) FormatMagickSize(size,MagickFalse,resource_request);
   if (resource_semaphore == (SemaphoreInfo *) NULL)
-    AcquireSemaphoreInfo(&resource_semaphore);
+    resource_semaphore=AcquireSemaphoreInfo();
   LockSemaphoreInfo(resource_semaphore);
   switch (type)
   {
@@ -501,7 +501,7 @@
   if (file == -1)
     return(file);
   if (resource_semaphore == (SemaphoreInfo *) NULL)
-    AcquireSemaphoreInfo(&resource_semaphore);
+    resource_semaphore=AcquireSemaphoreInfo();
   LockSemaphoreInfo(resource_semaphore);
   if (temporary_resources == (SplayTreeInfo *) NULL)
     temporary_resources=NewSplayTree(CompareSplayTreeString,
@@ -619,7 +619,7 @@
 
   resource=0;
   if (resource_semaphore == (SemaphoreInfo *) NULL)
-    AcquireSemaphoreInfo(&resource_semaphore);
+    resource_semaphore=AcquireSemaphoreInfo();
   LockSemaphoreInfo(resource_semaphore);
   switch (type)
   {
@@ -708,7 +708,7 @@
   if (file == (const FILE *) NULL)
     file=stdout;
   if (resource_semaphore == (SemaphoreInfo *) NULL)
-    AcquireSemaphoreInfo(&resource_semaphore);
+    resource_semaphore=AcquireSemaphoreInfo();
   LockSemaphoreInfo(resource_semaphore);
   (void) FormatMagickSize(resource_info.area_limit,MagickFalse,area_limit);
   (void) FormatMagickSize(resource_info.memory_limit,MagickTrue,memory_limit);
@@ -770,7 +770,7 @@
 
   (void) FormatMagickSize(size,MagickFalse,resource_request);
   if (resource_semaphore == (SemaphoreInfo *) NULL)
-    AcquireSemaphoreInfo(&resource_semaphore);
+    resource_semaphore=AcquireSemaphoreInfo();
   LockSemaphoreInfo(resource_semaphore);
   switch (type)
   {
@@ -958,7 +958,7 @@
   /*
     Set Magick resource limits.
   */
-  AcquireSemaphoreInfo(&resource_semaphore);
+  resource_semaphore=AcquireSemaphoreInfo();
   pagesize=GetMagickPageSize();
   pages=(-1);
 #if defined(MAGICKCORE_HAVE_SYSCONF) && defined(_SC_PHYS_PAGES)
@@ -1075,14 +1075,14 @@
 MagickPrivate void ResourceComponentTerminus(void)
 {
   if (resource_semaphore == (SemaphoreInfo *) NULL)
-    AcquireSemaphoreInfo(&resource_semaphore);
+    resource_semaphore=AcquireSemaphoreInfo();
   LockSemaphoreInfo(resource_semaphore);
   if (temporary_resources != (SplayTreeInfo *) NULL)
     temporary_resources=DestroySplayTree(temporary_resources);
   if (random_info != (RandomInfo *) NULL)
     random_info=DestroyRandomInfo(random_info);
   UnlockSemaphoreInfo(resource_semaphore);
-  DestroySemaphoreInfo(&resource_semaphore);
+  RelinquishSemaphoreInfo(&resource_semaphore);
 }
 
 /*
@@ -1126,7 +1126,7 @@
     *value;
 
   if (resource_semaphore == (SemaphoreInfo *) NULL)
-    AcquireSemaphoreInfo(&resource_semaphore);
+    resource_semaphore=AcquireSemaphoreInfo();
   LockSemaphoreInfo(resource_semaphore);
   value=(char *) NULL;
   switch (type)
diff --git a/MagickCore/semaphore.c b/MagickCore/semaphore.c
index 5e32797..033a0ac 100644
--- a/MagickCore/semaphore.c
+++ b/MagickCore/semaphore.c
@@ -81,46 +81,11 @@
 %                                                                             %
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %
-%  AcquireSemaphoreInfo() acquires a semaphore.
+%  AcquireSemaphoreInfo() initializes the SemaphoreInfo structure.
 %
 %  The format of the AcquireSemaphoreInfo method is:
 %
-%      void AcquireSemaphoreInfo(SemaphoreInfo **semaphore_info)
-%
-%  A description of each parameter follows:
-%
-%    o semaphore_info: Specifies a pointer to an SemaphoreInfo structure.
-%
-*/
-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();
-      UnlockMagickMutex();
-    }
-}
-
-/*
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%                                                                             %
-%                                                                             %
-%                                                                             %
-%   A l l o c a t e S e m a p h o r e I n f o                                 %
-%                                                                             %
-%                                                                             %
-%                                                                             %
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%
-%  AllocateSemaphoreInfo() initializes the SemaphoreInfo structure.
-%
-%  The format of the AllocateSemaphoreInfo method is:
-%
-%      SemaphoreInfo *AllocateSemaphoreInfo(void)
+%      SemaphoreInfo *AcquireSemaphoreInfo(void)
 %
 */
 
@@ -187,7 +152,7 @@
   return(NULL);
 }
 
-MagickExport SemaphoreInfo *AllocateSemaphoreInfo(void)
+MagickExport SemaphoreInfo *AcquireSemaphoreInfo(void)
 {
   SemaphoreInfo
     *semaphore_info;
@@ -271,58 +236,6 @@
 %                                                                             %
 %                                                                             %
 %                                                                             %
-%   D e s t r o y S e m a p h o r e I n f o                                   %
-%                                                                             %
-%                                                                             %
-%                                                                             %
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%
-%  DestroySemaphoreInfo() destroys a semaphore.
-%
-%  The format of the DestroySemaphoreInfo method is:
-%
-%      void DestroySemaphoreInfo(SemaphoreInfo **semaphore_info)
-%
-%  A description of each parameter follows:
-%
-%    o semaphore_info: Specifies a pointer to an SemaphoreInfo structure.
-%
-*/
-MagickExport void DestroySemaphoreInfo(SemaphoreInfo **semaphore_info)
-{
-  assert(semaphore_info != (SemaphoreInfo **) NULL);
-  assert((*semaphore_info) != (SemaphoreInfo *) NULL);
-  assert((*semaphore_info)->signature == MagickSignature);
-  InitializeMagickMutex();
-  LockMagickMutex();
-#if defined(MAGICKCORE_OPENMP_SUPPORT)
-  omp_destroy_lock((omp_lock_t *) &(*semaphore_info)->mutex);
-#elif defined(MAGICKCORE_THREAD_SUPPORT)
-  {
-    int
-      status;
-
-    status=pthread_mutex_destroy(&(*semaphore_info)->mutex);
-    if (status != 0)
-      {
-        errno=status;
-        perror("unable to destroy mutex");
-        _exit(1);
-      }
-  }
-#elif defined(MAGICKCORE_HAVE_WINTHREADS)
-  DeleteCriticalSection(&(*semaphore_info)->mutex);
-#endif
-  (*semaphore_info)->signature=(~MagickSignature);
-  *semaphore_info=(SemaphoreInfo *) RelinquishSemaphoreMemory(*semaphore_info);
-  UnlockMagickMutex();
-}
-
-/*
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%                                                                             %
-%                                                                             %
-%                                                                             %
 %   L o c k S e m a p h o r e I n f o                                         %
 %                                                                             %
 %                                                                             %
@@ -379,28 +292,51 @@
 %                                                                             %
 %                                                                             %
 %                                                                             %
-%   R e l i n g u i s h S e m a p h o r e I n f o                             %
+%   R e l i n q u i s h S  e m a p h o r e I n f o                            %
 %                                                                             %
 %                                                                             %
 %                                                                             %
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %
-%  RelinquishSemaphoreInfo() relinquishes a semaphore.
+%  RelinquishSemaphoreInfo() destroys a semaphore.
 %
 %  The format of the RelinquishSemaphoreInfo method is:
 %
-%      RelinquishSemaphoreInfo(SemaphoreInfo *semaphore_info)
+%      void RelinquishSemaphoreInfo(SemaphoreInfo **semaphore_info)
 %
 %  A description of each parameter follows:
 %
 %    o semaphore_info: Specifies a pointer to an SemaphoreInfo structure.
 %
 */
-MagickExport void RelinquishSemaphoreInfo(SemaphoreInfo *semaphore_info)
+MagickExport void RelinquishSemaphoreInfo(SemaphoreInfo **semaphore_info)
 {
-  assert(semaphore_info != (SemaphoreInfo *) NULL);
-  assert(semaphore_info->signature == MagickSignature);
-  UnlockSemaphoreInfo(semaphore_info);
+  assert(semaphore_info != (SemaphoreInfo **) NULL);
+  assert((*semaphore_info) != (SemaphoreInfo *) NULL);
+  assert((*semaphore_info)->signature == MagickSignature);
+  InitializeMagickMutex();
+  LockMagickMutex();
+#if defined(MAGICKCORE_OPENMP_SUPPORT)
+  omp_destroy_lock((omp_lock_t *) &(*semaphore_info)->mutex);
+#elif defined(MAGICKCORE_THREAD_SUPPORT)
+  {
+    int
+      status;
+
+    status=pthread_mutex_destroy(&(*semaphore_info)->mutex);
+    if (status != 0)
+      {
+        errno=status;
+        perror("unable to destroy mutex");
+        _exit(1);
+      }
+  }
+#elif defined(MAGICKCORE_HAVE_WINTHREADS)
+  DeleteCriticalSection(&(*semaphore_info)->mutex);
+#endif
+  (*semaphore_info)->signature=(~MagickSignature);
+  *semaphore_info=(SemaphoreInfo *) RelinquishSemaphoreMemory(*semaphore_info);
+  UnlockMagickMutex();
 }
 
 /*
diff --git a/MagickCore/semaphore.h b/MagickCore/semaphore.h
index 63c5318..80e5ee0 100644
--- a/MagickCore/semaphore.h
+++ b/MagickCore/semaphore.h
@@ -26,13 +26,11 @@
   SemaphoreInfo;
 
 extern MagickExport SemaphoreInfo
-  *AllocateSemaphoreInfo(void);
+  *AcquireSemaphoreInfo(void);
 
 extern MagickExport void
-  AcquireSemaphoreInfo(SemaphoreInfo **),
-  DestroySemaphoreInfo(SemaphoreInfo **),
   LockSemaphoreInfo(SemaphoreInfo *),
-  RelinquishSemaphoreInfo(SemaphoreInfo *),
+  RelinquishSemaphoreInfo(SemaphoreInfo **),
   UnlockSemaphoreInfo(SemaphoreInfo *);
 
 #if defined(__cplusplus) || defined(c_plusplus)
diff --git a/MagickCore/splay-tree.c b/MagickCore/splay-tree.c
index 6c6c115..aaf1e68 100644
--- a/MagickCore/splay-tree.c
+++ b/MagickCore/splay-tree.c
@@ -735,7 +735,7 @@
     }
   splay_tree->signature=(~MagickSignature);
   UnlockSemaphoreInfo(splay_tree->semaphore);
-  DestroySemaphoreInfo(&splay_tree->semaphore);
+  RelinquishSemaphoreInfo(&splay_tree->semaphore);
   splay_tree=(SplayTreeInfo *) RelinquishMagickMemory(splay_tree);
   return(splay_tree);
 }
@@ -1115,7 +1115,7 @@
   splay_tree->next=(void *) NULL;
   splay_tree->nodes=0;
   splay_tree->debug=IsEventLogging();
-  splay_tree->semaphore=AllocateSemaphoreInfo();
+  splay_tree->semaphore=AcquireSemaphoreInfo();
   splay_tree->signature=MagickSignature;
   return(splay_tree);
 }
diff --git a/MagickCore/stream.c b/MagickCore/stream.c
index 3fafba1..d32ae85 100644
--- a/MagickCore/stream.c
+++ b/MagickCore/stream.c
@@ -236,9 +236,9 @@
     cache_info->nexus_info=DestroyPixelCacheNexus(cache_info->nexus_info,
       cache_info->number_threads);
   if (cache_info->file_semaphore != (SemaphoreInfo *) NULL)
-    DestroySemaphoreInfo(&cache_info->file_semaphore);
+    RelinquishSemaphoreInfo(&cache_info->file_semaphore);
   if (cache_info->semaphore != (SemaphoreInfo *) NULL)
-    DestroySemaphoreInfo(&cache_info->semaphore);
+    RelinquishSemaphoreInfo(&cache_info->semaphore);
   cache_info=(CacheInfo *) RelinquishMagickMemory(cache_info);
 }
 
diff --git a/MagickCore/type.c b/MagickCore/type.c
index 8e8f79d..6d48791 100644
--- a/MagickCore/type.c
+++ b/MagickCore/type.c
@@ -786,7 +786,7 @@
       (instantiate_type == MagickFalse))
     {
       if (type_semaphore == (SemaphoreInfo *) NULL)
-        AcquireSemaphoreInfo(&type_semaphore);
+        type_semaphore=AcquireSemaphoreInfo();
       LockSemaphoreInfo(type_semaphore);
       if ((type_list == (SplayTreeInfo *) NULL) &&
           (instantiate_type == MagickFalse))
@@ -1365,7 +1365,7 @@
 */
 MagickPrivate MagickBooleanType TypeComponentGenesis(void)
 {
-  AcquireSemaphoreInfo(&type_semaphore);
+  type_semaphore=AcquireSemaphoreInfo();
   return(MagickTrue);
 }
 
@@ -1390,11 +1390,11 @@
 MagickPrivate void TypeComponentTerminus(void)
 {
   if (type_semaphore == (SemaphoreInfo *) NULL)
-    AcquireSemaphoreInfo(&type_semaphore);
+    type_semaphore=AcquireSemaphoreInfo();
   LockSemaphoreInfo(type_semaphore);
   if (type_list != (SplayTreeInfo *) NULL)
     type_list=DestroySplayTree(type_list);
   instantiate_type=MagickFalse;
   UnlockSemaphoreInfo(type_semaphore);
-  DestroySemaphoreInfo(&type_semaphore);
+  RelinquishSemaphoreInfo(&type_semaphore);
 }
diff --git a/MagickWand/wand.c b/MagickWand/wand.c
index ad3017e..560e017 100644
--- a/MagickWand/wand.c
+++ b/MagickWand/wand.c
@@ -77,7 +77,7 @@
     id = 0;
 
   if (wand_semaphore == (SemaphoreInfo *) NULL)
-    AcquireSemaphoreInfo(&wand_semaphore);
+    wand_semaphore=AcquireSemaphoreInfo();
   LockSemaphoreInfo(wand_semaphore);
   if ((wand_ids == (SplayTreeInfo *) NULL) && IsMagickFalse(instantiate_wand))
     {
@@ -114,13 +114,13 @@
 WandExport void DestroyWandIds(void)
 {
   if (wand_semaphore == (SemaphoreInfo *) NULL)
-    AcquireSemaphoreInfo(&wand_semaphore);
+    wand_semaphore=AcquireSemaphoreInfo();
   LockSemaphoreInfo(wand_semaphore);
   if (wand_ids != (SplayTreeInfo *) NULL)
     wand_ids=DestroySplayTree(wand_ids);
   instantiate_wand=MagickFalse;
   UnlockSemaphoreInfo(wand_semaphore);
-  DestroySemaphoreInfo(&wand_semaphore);
+  RelinquishSemaphoreInfo(&wand_semaphore);
 }
 
 /*
diff --git a/coders/png.c b/coders/png.c
index 37ac82d..d6b1d13 100644
--- a/coders/png.c
+++ b/coders/png.c
@@ -7659,7 +7659,7 @@
   (void) RegisterMagickInfo(entry);
 
 #ifdef PNG_SETJMP_NOT_THREAD_SAFE
-  ping_semaphore=AllocateSemaphoreInfo();
+  ping_semaphore=AcquireSemaphoreInfo();
 #endif
 
   return(MagickImageCoderSignature);
@@ -7698,7 +7698,7 @@
 
 #ifdef PNG_SETJMP_NOT_THREAD_SAFE
   if (ping_semaphore != (SemaphoreInfo *) NULL)
-    DestroySemaphoreInfo(&ping_semaphore);
+    RelinquishSemaphoreInfo(&ping_semaphore);
 #endif
 }
 
diff --git a/coders/tiff.c b/coders/tiff.c
index 4ed39fc..8a771e8 100644
--- a/coders/tiff.c
+++ b/coders/tiff.c
@@ -1873,7 +1873,7 @@
     *entry;
 
   if (tiff_semaphore == (SemaphoreInfo *) NULL)
-    tiff_semaphore=AllocateSemaphoreInfo();
+    tiff_semaphore=AcquireSemaphoreInfo();
   LockSemaphoreInfo(tiff_semaphore);
   if (instantiate_key == MagickFalse)
     {
@@ -2006,7 +2006,7 @@
   (void) UnregisterMagickInfo("TIF");
   (void) UnregisterMagickInfo("PTIF");
   if (tiff_semaphore == (SemaphoreInfo *) NULL)
-    tiff_semaphore=AllocateSemaphoreInfo();
+    tiff_semaphore=AcquireSemaphoreInfo();
   LockSemaphoreInfo(tiff_semaphore);
   if (instantiate_key != MagickFalse)
     {
@@ -2019,7 +2019,7 @@
       instantiate_key=MagickFalse;
     }
   UnlockSemaphoreInfo(tiff_semaphore);
-  DestroySemaphoreInfo(&tiff_semaphore);
+  RelinquishSemaphoreInfo(&tiff_semaphore);
 }
 
 #if defined(MAGICKCORE_TIFF_DELEGATE)