]> granicus.if.org Git - imagemagick/blobdiff - MagickCore/registry.c
(no commit message)
[imagemagick] / MagickCore / registry.c
index e3ba26b16b15d2cd6ecf92ac2333732459596dd0..b8af0acfca5ab29fb1daba5ac9f34bf7aacd7793 100644 (file)
 %                       MagickCore Registry Methods                           %
 %                                                                             %
 %                              Software Design                                %
-%                                John Cristy                                  %
+%                                   Cristy                                    %
 %                                 March 2000                                  %
 %                                                                             %
 %                                                                             %
-%  Copyright 1999-2011 ImageMagick Studio LLC, a non-profit organization      %
+%  Copyright 1999-2014 ImageMagick Studio LLC, a non-profit organization      %
 %  dedicated to making software imaging solutions freely available.           %
 %                                                                             %
 %  You may not use this file except in compliance with the License.  You may  %
@@ -47,6 +47,7 @@
 #include "MagickCore/list.h"
 #include "MagickCore/memory_.h"
 #include "MagickCore/registry.h"
+#include "MagickCore/registry-private.h"
 #include "MagickCore/splay-tree.h"
 #include "MagickCore/string_.h"
 #include "MagickCore/utility.h"
@@ -74,9 +75,6 @@ static SplayTreeInfo
 
 static SemaphoreInfo
   *registry_semaphore = (SemaphoreInfo *) NULL;
-
-static volatile MagickBooleanType
-  instantiate_registry = MagickFalse;
 \f
 /*
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -297,9 +295,10 @@ MagickExport char *GetNextImageRegistry(void)
 %      MagickBooleanType RegistryComponentGenesis(void)
 %
 */
-MagickExport MagickBooleanType RegistryComponentGenesis(void)
+MagickPrivate MagickBooleanType RegistryComponentGenesis(void)
 {
-  AcquireSemaphoreInfo(&registry_semaphore);
+  if (registry_semaphore == (SemaphoreInfo *) NULL)
+    registry_semaphore=AcquireSemaphoreInfo();
   return(MagickTrue);
 }
 \f
@@ -321,18 +320,17 @@ MagickExport MagickBooleanType RegistryComponentGenesis(void)
 %      void RegistryComponentTerminus(void)
 %
 */
-MagickExport void RegistryComponentTerminus(void)
+MagickPrivate void RegistryComponentTerminus(void)
 {
   if (registry_semaphore == (SemaphoreInfo *) NULL)
-    AcquireSemaphoreInfo(&registry_semaphore);
+    ActivateSemaphoreInfo(&registry_semaphore);
   LockSemaphoreInfo(registry_semaphore);
   if (IsEventLogging() != MagickFalse)
     (void) LogMagickEvent(TraceEvent,GetMagickModule(),"...");
   if (registry != (void *) NULL)
     registry=DestroySplayTree(registry);
-  instantiate_registry=MagickFalse;
   UnlockSemaphoreInfo(registry_semaphore);
-  DestroySemaphoreInfo(&registry_semaphore);
+  RelinquishSemaphoreInfo(&registry_semaphore);
 }
 \f
 /*
@@ -468,6 +466,8 @@ MagickExport MagickBooleanType SetImageRegistry(const RegistryType type,
 
   if (IsEventLogging() != MagickFalse)
     (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",key);
+  if (value == (const void *) NULL)
+    return(MagickFalse);
   clone_value=(void *) NULL;
   switch (type)
   {
@@ -521,19 +521,14 @@ MagickExport MagickBooleanType SetImageRegistry(const RegistryType type,
   registry_info->type=type;
   registry_info->value=clone_value;
   registry_info->signature=MagickSignature;
-  if ((registry == (SplayTreeInfo *) NULL) &&
-      (instantiate_registry == MagickFalse))
+  if (registry == (SplayTreeInfo *) NULL)
     {
       if (registry_semaphore == (SemaphoreInfo *) NULL)
-        AcquireSemaphoreInfo(&registry_semaphore);
+        ActivateSemaphoreInfo(&registry_semaphore);
       LockSemaphoreInfo(registry_semaphore);
-      if ((registry == (SplayTreeInfo *) NULL) &&
-          (instantiate_registry == MagickFalse))
-        {
-          registry=NewSplayTree(CompareSplayTreeString,RelinquishMagickMemory,
-            DestroyRegistryNode);
-          instantiate_registry=MagickTrue;
-        }
+      if (registry == (SplayTreeInfo *) NULL)
+        registry=NewSplayTree(CompareSplayTreeString,RelinquishMagickMemory,
+          DestroyRegistryNode);
       UnlockSemaphoreInfo(registry_semaphore);
     }
   status=AddValueToSplayTree(registry,ConstantString(key),registry_info);