#include "magick/resource_.h"
#include "magick/policy.h"
#include "magick/semaphore.h"
+#include "magick/semaphore-private.h"
#include "magick/signature-private.h"
#include "magick/splay-tree.h"
#include "magick/string_.h"
*magick_list = (SplayTreeInfo *) NULL;
static volatile MagickBooleanType
- instantiate_magick = MagickFalse; /* double-checked locking pattern */
+ instantiate_magick = MagickFalse,
+ instantiate_magickcore = MagickFalse;
\f
/*
Forward declarations.
/*
Initialize the Magick environment.
*/
+ LockMagickMutex();
+ if (instantiate_magickcore != MagickFalse)
+ {
+ UnlockMagickMutex();
+ return;
+ }
(void) SemaphoreComponentGenesis();
(void) LogComponentGenesis();
(void) LocaleComponentGenesis();
#if defined(MAGICKCORE_X11_DELEGATE)
(void) XComponentGenesis();
#endif
+ instantiate_magickcore=MagickTrue;
+ UnlockMagickMutex();
}
\f
/*
*/
MagickExport void MagickCoreTerminus(void)
{
+ LockMagickMutex();
+ if (instantiate_magickcore == MagickFalse)
+ {
+ UnlockMagickMutex();
+ return;
+ }
#if defined(MAGICKCORE_X11_DELEGATE)
XComponentTerminus();
#endif
LocaleComponentTerminus();
LogComponentTerminus();
SemaphoreComponentTerminus();
- instantiate_magick=MagickFalse;
+ instantiate_magickcore=MagickFalse;
+ UnlockMagickMutex();
}
\f
/*