diff --git a/magick/cache.c b/magick/cache.c
index 9618e1d..e7a3f5d 100644
--- a/magick/cache.c
+++ b/magick/cache.c
@@ -204,6 +204,7 @@
(instantiate_cache == MagickFalse))
{
AcquireSemaphoreInfo(&cache_semaphore);
+ LockSemaphoreInfo(cache_semaphore);
if ((cache_resources == (SplayTreeInfo *) NULL) &&
(instantiate_cache == MagickFalse))
{
@@ -211,7 +212,7 @@
NULL,(void *(*)(void *)) NULL,(void *(*)(void *)) NULL);
instantiate_cache=MagickTrue;
}
- RelinquishSemaphoreInfo(cache_semaphore);
+ UnlockSemaphoreInfo(cache_semaphore);
}
(void) AddValueToSplayTree(cache_resources,cache_info,cache_info);
return((Cache ) cache_info);
@@ -283,8 +284,8 @@
*/
MagickExport MagickBooleanType CacheComponentGenesis(void)
{
- AcquireSemaphoreInfo(&cache_semaphore);
- RelinquishSemaphoreInfo(cache_semaphore);
+ assert(cache_semaphore == (SemaphoreInfo *) NULL);
+ cache_semaphore=AllocateSemaphoreInfo();
return(MagickTrue);
}
@@ -308,11 +309,13 @@
*/
MagickExport void CacheComponentTerminus(void)
{
- AcquireSemaphoreInfo(&cache_semaphore);
+ if (cache_semaphore == (SemaphoreInfo *) NULL)
+ AcquireSemaphoreInfo(&cache_semaphore);
+ LockSemaphoreInfo(cache_semaphore);
if (cache_resources != (SplayTreeInfo *) NULL)
cache_resources=DestroySplayTree(cache_resources);
instantiate_cache=MagickFalse;
- RelinquishSemaphoreInfo(cache_semaphore);
+ UnlockSemaphoreInfo(cache_semaphore);
DestroySemaphoreInfo(&cache_semaphore);
}
@@ -597,11 +600,11 @@
int
status;
- AcquireSemaphoreInfo(&cache_info->disk_semaphore);
+ LockSemaphoreInfo(cache_info->disk_semaphore);
status=close(cache_info->file);
cache_info->file=(-1);
RelinquishMagickResource(FileResource,1);
- RelinquishSemaphoreInfo(cache_info->disk_semaphore);
+ UnlockSemaphoreInfo(cache_info->disk_semaphore);
return(status == -1 ? MagickFalse : MagickTrue);
}
@@ -616,10 +619,10 @@
*/
if (GetMagickResource(FileResource) < GetMagickResourceLimit(FileResource))
return;
- AcquireSemaphoreInfo(&cache_semaphore);
+ LockSemaphoreInfo(cache_semaphore);
if (cache_resources == (SplayTreeInfo *) NULL)
{
- RelinquishSemaphoreInfo(cache_semaphore);
+ UnlockSemaphoreInfo(cache_semaphore);
return;
}
ResetSplayTreeIterator(cache_resources);
@@ -645,7 +648,7 @@
}
if (q != (CacheInfo *) NULL)
(void) ClosePixelCacheOnDisk(q); /* relinquish least recently used cache */
- RelinquishSemaphoreInfo(cache_semaphore);
+ UnlockSemaphoreInfo(cache_semaphore);
}
static inline MagickSizeType MagickMax(const MagickSizeType x,
@@ -673,10 +676,10 @@
/*
Open pixel cache on disk.
*/
- AcquireSemaphoreInfo(&cache_info->disk_semaphore);
+ LockSemaphoreInfo(cache_info->disk_semaphore);
if (cache_info->file != -1)
{
- RelinquishSemaphoreInfo(cache_info->disk_semaphore);
+ UnlockSemaphoreInfo(cache_info->disk_semaphore);
return(MagickTrue); /* cache already open */
}
LimitPixelCacheDescriptors();
@@ -710,13 +713,13 @@
}
if (file == -1)
{
- RelinquishSemaphoreInfo(cache_info->disk_semaphore);
+ UnlockSemaphoreInfo(cache_info->disk_semaphore);
return(MagickFalse);
}
(void) AcquireMagickResource(FileResource,1);
cache_info->file=file;
cache_info->timestamp=time(0);
- RelinquishSemaphoreInfo(cache_info->disk_semaphore);
+ UnlockSemaphoreInfo(cache_info->disk_semaphore);
return(MagickTrue);
}
diff --git a/magick/coder.c b/magick/coder.c
index e6c8675..bdb8ad1 100644
--- a/magick/coder.c
+++ b/magick/coder.c
@@ -255,8 +255,8 @@
*/
MagickExport MagickBooleanType CoderComponentGenesis(void)
{
- AcquireSemaphoreInfo(&coder_semaphore);
- RelinquishSemaphoreInfo(coder_semaphore);
+ assert(coder_semaphore == (SemaphoreInfo *) NULL);
+ coder_semaphore=AllocateSemaphoreInfo();
return(MagickTrue);
}
@@ -280,11 +280,13 @@
*/
MagickExport void CoderComponentTerminus(void)
{
- AcquireSemaphoreInfo(&coder_semaphore);
+ if (coder_semaphore == (SemaphoreInfo *) NULL)
+ AcquireSemaphoreInfo(&coder_semaphore);
+ LockSemaphoreInfo(coder_semaphore);
if (coder_list != (SplayTreeInfo *) NULL)
coder_list=DestroySplayTree(coder_list);
instantiate_coder=MagickFalse;
- RelinquishSemaphoreInfo(coder_semaphore);
+ UnlockSemaphoreInfo(coder_semaphore);
DestroySemaphoreInfo(&coder_semaphore);
}
@@ -401,7 +403,7 @@
/*
Generate coder list.
*/
- AcquireSemaphoreInfo(&coder_semaphore);
+ LockSemaphoreInfo(coder_semaphore);
ResetSplayTreeIterator(coder_list);
p=(const CoderInfo *) GetNextValueInSplayTree(coder_list);
for (i=0; p != (const CoderInfo *) NULL; )
@@ -411,7 +413,7 @@
coder_map[i++]=p;
p=(const CoderInfo *) GetNextValueInSplayTree(coder_list);
}
- RelinquishSemaphoreInfo(coder_semaphore);
+ UnlockSemaphoreInfo(coder_semaphore);
qsort((void *) coder_map,(size_t) i,sizeof(*coder_map),CoderInfoCompare);
coder_map[i]=(CoderInfo *) NULL;
*number_coders=(unsigned long) i;
@@ -486,7 +488,7 @@
/*
Generate coder list.
*/
- AcquireSemaphoreInfo(&coder_semaphore);
+ LockSemaphoreInfo(coder_semaphore);
ResetSplayTreeIterator(coder_list);
p=(const CoderInfo *) GetNextValueInSplayTree(coder_list);
for (i=0; p != (const CoderInfo *) NULL; )
@@ -496,7 +498,7 @@
coder_map[i++]=ConstantString(p->name);
p=(const CoderInfo *) GetNextValueInSplayTree(coder_list);
}
- RelinquishSemaphoreInfo(coder_semaphore);
+ UnlockSemaphoreInfo(coder_semaphore);
qsort((void *) coder_map,(size_t) i,sizeof(*coder_map),CoderCompare);
coder_map[i]=(char *) NULL;
*number_coders=(unsigned long) i;
@@ -531,13 +533,14 @@
(instantiate_coder == MagickFalse))
{
AcquireSemaphoreInfo(&coder_semaphore);
+ LockSemaphoreInfo(coder_semaphore);
if ((coder_list == (SplayTreeInfo *) NULL) &&
(instantiate_coder == MagickFalse))
{
(void) LoadCoderLists(MagickCoderFilename,exception);
instantiate_coder=MagickTrue;
}
- RelinquishSemaphoreInfo(coder_semaphore);
+ UnlockSemaphoreInfo(coder_semaphore);
}
return(coder_list != (SplayTreeInfo *) NULL ? MagickTrue : MagickFalse);
}
diff --git a/magick/color.c b/magick/color.c
index 4b1f811..a6926ee 100644
--- a/magick/color.c
+++ b/magick/color.c
@@ -816,8 +816,8 @@
*/
MagickExport MagickBooleanType ColorComponentGenesis(void)
{
- AcquireSemaphoreInfo(&color_semaphore);
- RelinquishSemaphoreInfo(color_semaphore);
+ assert(color_semaphore == (SemaphoreInfo *) NULL);
+ color_semaphore=AllocateSemaphoreInfo();
return(MagickTrue);
}
@@ -859,11 +859,13 @@
MagickExport void ColorComponentTerminus(void)
{
- AcquireSemaphoreInfo(&color_semaphore);
+ if (color_semaphore == (SemaphoreInfo *) NULL)
+ AcquireSemaphoreInfo(&color_semaphore);
+ LockSemaphoreInfo(color_semaphore);
if (color_list != (LinkedListInfo *) NULL)
color_list=DestroyLinkedList(color_list,DestroyColorElement);
instantiate_color=MagickFalse;
- RelinquishSemaphoreInfo(color_semaphore);
+ UnlockSemaphoreInfo(color_semaphore);
DestroySemaphoreInfo(&color_semaphore);
}
@@ -932,7 +934,7 @@
/*
Search for color tag.
*/
- AcquireSemaphoreInfo(&color_semaphore);
+ LockSemaphoreInfo(color_semaphore);
ResetLinkedListIterator(color_list);
p=(const ColorInfo *) GetNextValueInLinkedList(color_list);
while (p != (const ColorInfo *) NULL)
@@ -947,7 +949,7 @@
else
(void) InsertValueInLinkedList(color_list,0,
RemoveElementByValueFromLinkedList(color_list,p));
- RelinquishSemaphoreInfo(color_semaphore);
+ UnlockSemaphoreInfo(color_semaphore);
return(p);
}
@@ -1020,6 +1022,14 @@
default:
break;
}
+ if ((pixel->colorspace == HSLColorspace) ||
+ (pixel->colorspace == HSBColorspace))
+ {
+ (void) FormatMagickString(component,MaxTextExtent,"%g%%",
+ (double) (100.0*QuantumScale*color));
+ (void) ConcatenateMagickString(tuple,component,MaxTextExtent);
+ return;
+ }
if (compliance != SVGCompliance)
{
if (pixel->depth > 16)
@@ -1138,7 +1148,7 @@
/*
Generate color list.
*/
- AcquireSemaphoreInfo(&color_semaphore);
+ LockSemaphoreInfo(color_semaphore);
ResetLinkedListIterator(color_list);
p=(const ColorInfo *) GetNextValueInLinkedList(color_list);
for (i=0; p != (const ColorInfo *) NULL; )
@@ -1148,7 +1158,7 @@
colors[i++]=p;
p=(const ColorInfo *) GetNextValueInLinkedList(color_list);
}
- RelinquishSemaphoreInfo(color_semaphore);
+ UnlockSemaphoreInfo(color_semaphore);
qsort((void *) colors,(size_t) i,sizeof(*colors),ColorInfoCompare);
colors[i]=(ColorInfo *) NULL;
*number_colors=(unsigned long) i;
@@ -1231,7 +1241,7 @@
/*
Generate color list.
*/
- AcquireSemaphoreInfo(&color_semaphore);
+ LockSemaphoreInfo(color_semaphore);
ResetLinkedListIterator(color_list);
p=(const ColorInfo *) GetNextValueInLinkedList(color_list);
for (i=0; p != (const ColorInfo *) NULL; )
@@ -1241,7 +1251,7 @@
colors[i++]=ConstantString(p->name);
p=(const ColorInfo *) GetNextValueInLinkedList(color_list);
}
- RelinquishSemaphoreInfo(color_semaphore);
+ UnlockSemaphoreInfo(color_semaphore);
qsort((void *) colors,(size_t) i,sizeof(*colors),ColorCompare);
colors[i]=(char *) NULL;
*number_colors=(unsigned long) i;
@@ -1447,13 +1457,14 @@
(instantiate_color == MagickFalse))
{
AcquireSemaphoreInfo(&color_semaphore);
+ LockSemaphoreInfo(color_semaphore);
if ((color_list == (LinkedListInfo *) NULL) &&
(instantiate_color == MagickFalse))
{
(void) LoadColorLists(ColorFilename,exception);
instantiate_color=MagickTrue;
}
- RelinquishSemaphoreInfo(color_semaphore);
+ UnlockSemaphoreInfo(color_semaphore);
}
return(color_list != (LinkedListInfo *) NULL ? MagickTrue : MagickFalse);
}
diff --git a/magick/configure.c b/magick/configure.c
index 5dee531..eb89731 100644
--- a/magick/configure.c
+++ b/magick/configure.c
@@ -114,8 +114,8 @@
*/
MagickExport MagickBooleanType ConfigureComponentGenesis(void)
{
- AcquireSemaphoreInfo(&configure_semaphore);
- RelinquishSemaphoreInfo(configure_semaphore);
+ assert(configure_semaphore == (SemaphoreInfo *) NULL);
+ configure_semaphore=AllocateSemaphoreInfo();
return(MagickTrue);
}
@@ -159,12 +159,14 @@
MagickExport void ConfigureComponentTerminus(void)
{
- AcquireSemaphoreInfo(&configure_semaphore);
+ if (configure_semaphore == (SemaphoreInfo *) NULL)
+ AcquireSemaphoreInfo(&configure_semaphore);
+ LockSemaphoreInfo(configure_semaphore);
if (configure_list != (LinkedListInfo *) NULL)
configure_list=DestroyLinkedList(configure_list,DestroyConfigureElement);
configure_list=(LinkedListInfo *) NULL;
instantiate_configure=MagickFalse;
- RelinquishSemaphoreInfo(configure_semaphore);
+ UnlockSemaphoreInfo(configure_semaphore);
DestroySemaphoreInfo(&configure_semaphore);
}
@@ -252,7 +254,7 @@
/*
Search for configure tag.
*/
- AcquireSemaphoreInfo(&configure_semaphore);
+ LockSemaphoreInfo(configure_semaphore);
ResetLinkedListIterator(configure_list);
p=(const ConfigureInfo *) GetNextValueInLinkedList(configure_list);
while (p != (const ConfigureInfo *) NULL)
@@ -264,7 +266,7 @@
if (p != (ConfigureInfo *) NULL)
(void) InsertValueInLinkedList(configure_list,0,
RemoveElementByValueFromLinkedList(configure_list,p));
- RelinquishSemaphoreInfo(configure_semaphore);
+ UnlockSemaphoreInfo(configure_semaphore);
return(p);
}
@@ -348,7 +350,7 @@
/*
Generate configure list.
*/
- AcquireSemaphoreInfo(&configure_semaphore);
+ LockSemaphoreInfo(configure_semaphore);
ResetLinkedListIterator(configure_list);
p=(const ConfigureInfo *) GetNextValueInLinkedList(configure_list);
for (i=0; p != (const ConfigureInfo *) NULL; )
@@ -358,7 +360,7 @@
options[i++]=p;
p=(const ConfigureInfo *) GetNextValueInLinkedList(configure_list);
}
- RelinquishSemaphoreInfo(configure_semaphore);
+ UnlockSemaphoreInfo(configure_semaphore);
qsort((void *) options,(size_t) i,sizeof(*options),ConfigureInfoCompare);
options[i]=(ConfigureInfo *) NULL;
*number_options=(unsigned long) i;
@@ -435,13 +437,11 @@
p=GetConfigureInfo("*",exception);
if (p == (const ConfigureInfo *) NULL)
return((char **) NULL);
- AcquireSemaphoreInfo(&configure_semaphore);
- RelinquishSemaphoreInfo(configure_semaphore);
options=(char **) AcquireQuantumMemory((size_t)
GetNumberOfElementsInLinkedList(configure_list)+1UL,sizeof(*options));
if (options == (char **) NULL)
return((char **) NULL);
- AcquireSemaphoreInfo(&configure_semaphore);
+ LockSemaphoreInfo(configure_semaphore);
ResetLinkedListIterator(configure_list);
p=(const ConfigureInfo *) GetNextValueInLinkedList(configure_list);
for (i=0; p != (const ConfigureInfo *) NULL; )
@@ -451,7 +451,7 @@
options[i++]=ConstantString(p->name);
p=(const ConfigureInfo *) GetNextValueInLinkedList(configure_list);
}
- RelinquishSemaphoreInfo(configure_semaphore);
+ UnlockSemaphoreInfo(configure_semaphore);
qsort((void *) options,(size_t) i,sizeof(*options),ConfigureCompare);
options[i]=(char *) NULL;
*number_options=(unsigned long) i;
@@ -869,13 +869,14 @@
(instantiate_configure == MagickFalse))
{
AcquireSemaphoreInfo(&configure_semaphore);
+ LockSemaphoreInfo(configure_semaphore);
if ((configure_list == (LinkedListInfo *) NULL) &&
(instantiate_configure == MagickFalse))
{
(void) LoadConfigureLists(ConfigureFilename,exception);
instantiate_configure=MagickTrue;
}
- RelinquishSemaphoreInfo(configure_semaphore);
+ UnlockSemaphoreInfo(configure_semaphore);
}
return(configure_list != (LinkedListInfo *) NULL ? MagickTrue : MagickFalse);
}
diff --git a/magick/constitute.c b/magick/constitute.c
index 96283b4..12f74f7 100644
--- a/magick/constitute.c
+++ b/magick/constitute.c
@@ -94,8 +94,8 @@
*/
MagickExport MagickBooleanType ConstituteComponentGenesis(void)
{
- AcquireSemaphoreInfo(&constitute_semaphore);
- RelinquishSemaphoreInfo(constitute_semaphore);
+ assert(constitute_semaphore == (SemaphoreInfo *) NULL);
+ constitute_semaphore=AllocateSemaphoreInfo();
return(MagickTrue);
}
@@ -119,8 +119,9 @@
*/
MagickExport void ConstituteComponentTerminus(void)
{
- if (constitute_semaphore != (SemaphoreInfo *) NULL)
- DestroySemaphoreInfo(&constitute_semaphore);
+ if (constitute_semaphore == (SemaphoreInfo *) NULL)
+ AcquireSemaphoreInfo(&constitute_semaphore);
+ DestroySemaphoreInfo(&constitute_semaphore);
}
/*
@@ -514,10 +515,13 @@
{
thread_support=GetMagickThreadSupport(magick_info);
if ((thread_support & DecoderThreadSupport) == 0)
- AcquireSemaphoreInfo(&constitute_semaphore);
+ {
+ AcquireSemaphoreInfo(&constitute_semaphore);
+ LockSemaphoreInfo(constitute_semaphore);
+ }
image=GetImageDecoder(magick_info)(read_info,exception);
if ((thread_support & DecoderThreadSupport) == 0)
- RelinquishSemaphoreInfo(constitute_semaphore);
+ UnlockSemaphoreInfo(constitute_semaphore);
}
else
{
@@ -546,11 +550,14 @@
MaxTextExtent);
*read_info->filename='\0';
if (GetDelegateThreadSupport(delegate_info) == MagickFalse)
- AcquireSemaphoreInfo(&constitute_semaphore);
+ {
+ AcquireSemaphoreInfo(&constitute_semaphore);
+ LockSemaphoreInfo(constitute_semaphore);
+ }
(void) InvokeDelegate(read_info,image,read_info->magick,(char *) NULL,
exception);
if (GetDelegateThreadSupport(delegate_info) == MagickFalse)
- RelinquishSemaphoreInfo(constitute_semaphore);
+ UnlockSemaphoreInfo(constitute_semaphore);
image=DestroyImageList(image);
read_info->temporary=MagickTrue;
(void) SetImageInfo(read_info,MagickFalse,exception);
@@ -570,10 +577,13 @@
}
thread_support=GetMagickThreadSupport(magick_info);
if ((thread_support & DecoderThreadSupport) == 0)
- AcquireSemaphoreInfo(&constitute_semaphore);
+ {
+ AcquireSemaphoreInfo(&constitute_semaphore);
+ LockSemaphoreInfo(constitute_semaphore);
+ }
image=(Image *) (GetImageDecoder(magick_info))(read_info,exception);
if ((thread_support & DecoderThreadSupport) == 0)
- RelinquishSemaphoreInfo(constitute_semaphore);
+ UnlockSemaphoreInfo(constitute_semaphore);
}
if (read_info->temporary != MagickFalse)
{
@@ -1099,10 +1109,13 @@
*/
thread_support=GetMagickThreadSupport(magick_info);
if ((thread_support & EncoderThreadSupport) == 0)
- AcquireSemaphoreInfo(&constitute_semaphore);
+ {
+ AcquireSemaphoreInfo(&constitute_semaphore);
+ LockSemaphoreInfo(constitute_semaphore);
+ }
status=GetImageEncoder(magick_info)(write_info,image);
if ((thread_support & EncoderThreadSupport) == 0)
- RelinquishSemaphoreInfo(constitute_semaphore);
+ UnlockSemaphoreInfo(constitute_semaphore);
}
else
{
@@ -1115,11 +1128,14 @@
*/
*write_info->filename='\0';
if (GetDelegateThreadSupport(delegate_info) == MagickFalse)
- AcquireSemaphoreInfo(&constitute_semaphore);
+ {
+ AcquireSemaphoreInfo(&constitute_semaphore);
+ LockSemaphoreInfo(constitute_semaphore);
+ }
status=InvokeDelegate(write_info,image,(char *) NULL,
write_info->magick,&image->exception);
if (GetDelegateThreadSupport(delegate_info) == MagickFalse)
- RelinquishSemaphoreInfo(constitute_semaphore);
+ UnlockSemaphoreInfo(constitute_semaphore);
(void) CopyMagickString(image->filename,filename,MaxTextExtent);
}
else
@@ -1146,10 +1162,13 @@
*/
thread_support=GetMagickThreadSupport(magick_info);
if ((thread_support & EncoderThreadSupport) == 0)
- AcquireSemaphoreInfo(&constitute_semaphore);
+ {
+ AcquireSemaphoreInfo(&constitute_semaphore);
+ LockSemaphoreInfo(constitute_semaphore);
+ }
status=GetImageEncoder(magick_info)(write_info,image);
if ((thread_support & EncoderThreadSupport) == 0)
- RelinquishSemaphoreInfo(constitute_semaphore);
+ UnlockSemaphoreInfo(constitute_semaphore);
}
}
}
diff --git a/magick/delegate.c b/magick/delegate.c
index 822881a..9706f2d 100644
--- a/magick/delegate.c
+++ b/magick/delegate.c
@@ -164,8 +164,8 @@
*/
MagickExport MagickBooleanType DelegateComponentGenesis(void)
{
- AcquireSemaphoreInfo(&delegate_semaphore);
- RelinquishSemaphoreInfo(delegate_semaphore);
+ assert(delegate_semaphore == (SemaphoreInfo *) NULL);
+ delegate_semaphore=AllocateSemaphoreInfo();
return(MagickTrue);
}
@@ -209,11 +209,13 @@
MagickExport void DelegateComponentTerminus(void)
{
- AcquireSemaphoreInfo(&delegate_semaphore);
+ if (delegate_semaphore == (SemaphoreInfo *) NULL)
+ AcquireSemaphoreInfo(&delegate_semaphore);
+ LockSemaphoreInfo(delegate_semaphore);
if (delegate_list != (LinkedListInfo *) NULL)
delegate_list=DestroyLinkedList(delegate_list,DestroyDelegate);
instantiate_delegate=MagickFalse;
- RelinquishSemaphoreInfo(delegate_semaphore);
+ UnlockSemaphoreInfo(delegate_semaphore);
DestroySemaphoreInfo(&delegate_semaphore);
}
@@ -379,7 +381,7 @@
/*
Search for named delegate.
*/
- AcquireSemaphoreInfo(&delegate_semaphore);
+ LockSemaphoreInfo(delegate_semaphore);
ResetLinkedListIterator(delegate_list);
p=(const DelegateInfo *) GetNextValueInLinkedList(delegate_list);
while (p != (const DelegateInfo *) NULL)
@@ -412,7 +414,7 @@
if (p != (const DelegateInfo *) NULL)
(void) InsertValueInLinkedList(delegate_list,0,
RemoveElementByValueFromLinkedList(delegate_list,p));
- RelinquishSemaphoreInfo(delegate_semaphore);
+ UnlockSemaphoreInfo(delegate_semaphore);
return(p);
}
@@ -503,7 +505,7 @@
/*
Generate delegate list.
*/
- AcquireSemaphoreInfo(&delegate_semaphore);
+ LockSemaphoreInfo(delegate_semaphore);
ResetLinkedListIterator(delegate_list);
p=(const DelegateInfo *) GetNextValueInLinkedList(delegate_list);
for (i=0; p != (const DelegateInfo *) NULL; )
@@ -514,7 +516,7 @@
delegates[i++]=p;
p=(const DelegateInfo *) GetNextValueInLinkedList(delegate_list);
}
- RelinquishSemaphoreInfo(delegate_semaphore);
+ UnlockSemaphoreInfo(delegate_semaphore);
qsort((void *) delegates,(size_t) i,sizeof(*delegates),DelegateInfoCompare);
delegates[i]=(DelegateInfo *) NULL;
*number_delegates=(unsigned long) i;
@@ -596,7 +598,7 @@
GetNumberOfElementsInLinkedList(delegate_list)+1UL,sizeof(*delegates));
if (delegates == (char **) NULL)
return((char **) NULL);
- AcquireSemaphoreInfo(&delegate_semaphore);
+ LockSemaphoreInfo(delegate_semaphore);
ResetLinkedListIterator(delegate_list);
p=(const DelegateInfo *) GetNextValueInLinkedList(delegate_list);
for (i=0; p != (const DelegateInfo *) NULL; )
@@ -609,7 +611,7 @@
delegates[i++]=ConstantString(p->encode);
p=(const DelegateInfo *) GetNextValueInLinkedList(delegate_list);
}
- RelinquishSemaphoreInfo(delegate_semaphore);
+ UnlockSemaphoreInfo(delegate_semaphore);
qsort((void *) delegates,(size_t) i,sizeof(*delegates),DelegateCompare);
delegates[i]=(char *) NULL;
*number_delegates=(unsigned long) i;
@@ -707,13 +709,14 @@
(instantiate_delegate == MagickFalse))
{
AcquireSemaphoreInfo(&delegate_semaphore);
+ LockSemaphoreInfo(delegate_semaphore);
if ((delegate_list == (LinkedListInfo *) NULL) &&
(instantiate_delegate == MagickFalse))
{
(void) LoadDelegateLists(DelegateFilename,exception);
instantiate_delegate=MagickTrue;
}
- RelinquishSemaphoreInfo(delegate_semaphore);
+ UnlockSemaphoreInfo(delegate_semaphore);
}
return(delegate_list != (LinkedListInfo *) NULL ? MagickTrue : MagickFalse);
}
diff --git a/magick/deprecate.c b/magick/deprecate.c
index 4e29df0..c3b337c 100644
--- a/magick/deprecate.c
+++ b/magick/deprecate.c
@@ -3758,7 +3758,7 @@
MagickExport void LiberateSemaphoreInfo(SemaphoreInfo **semaphore_info)
{
(void) LogMagickEvent(DeprecateEvent,GetMagickModule(),"last use: v5.5.7");
- RelinquishSemaphoreInfo(*semaphore_info);
+ UnlockSemaphoreInfo(*semaphore_info);
}
/*
diff --git a/magick/exception.c b/magick/exception.c
index bd542b9..d1d2351 100644
--- a/magick/exception.c
+++ b/magick/exception.c
@@ -158,7 +158,7 @@
assert(exception->signature == MagickSignature);
if (exception->exceptions == (void *) NULL)
return;
- AcquireSemaphoreInfo(&exception->semaphore);
+ LockSemaphoreInfo(exception->semaphore);
p=(ExceptionInfo *) RemoveLastElementFromLinkedList((LinkedListInfo *)
exception->exceptions);
while (p != (ExceptionInfo *) NULL)
@@ -170,7 +170,7 @@
exception->severity=UndefinedException;
exception->reason=(char *) NULL;
exception->description=(char *) NULL;
- RelinquishSemaphoreInfo(exception->semaphore);
+ UnlockSemaphoreInfo(exception->semaphore);
errno=0;
}
@@ -206,7 +206,7 @@
assert(exception->signature == MagickSignature);
if (exception->exceptions == (void *) NULL)
return;
- AcquireSemaphoreInfo(&exception->semaphore);
+ LockSemaphoreInfo(exception->semaphore);
ResetLinkedListIterator((LinkedListInfo *) exception->exceptions);
p=(const ExceptionInfo *) GetNextValueInLinkedList((LinkedListInfo *)
exception->exceptions);
@@ -221,7 +221,7 @@
p=(const ExceptionInfo *) GetNextValueInLinkedList((LinkedListInfo *)
exception->exceptions);
}
- RelinquishSemaphoreInfo(exception->semaphore);
+ UnlockSemaphoreInfo(exception->semaphore);
ClearMagickException(exception);
}
@@ -378,7 +378,7 @@
assert(exception != (ExceptionInfo *) NULL);
assert(exception->signature == MagickSignature);
- AcquireSemaphoreInfo(&exception->semaphore);
+ LockSemaphoreInfo(exception->semaphore);
exception->severity=UndefinedException;
if (exception->exceptions != (void *) NULL)
exception->exceptions=(void *) DestroyLinkedList((LinkedListInfo *)
@@ -386,7 +386,7 @@
relinquish=exception->relinquish;
if (exception->relinquish != MagickFalse)
exception->signature=(~MagickSignature);
- RelinquishSemaphoreInfo(exception->semaphore);
+ UnlockSemaphoreInfo(exception->semaphore);
DestroySemaphoreInfo(&exception->semaphore);
if (relinquish != MagickFalse)
exception=(ExceptionInfo *) RelinquishMagickMemory(exception);
@@ -421,6 +421,7 @@
(void) ResetMagickMemory(exception,0,sizeof(*exception));
exception->severity=UndefinedException;
exception->exceptions=(void *) NewLinkedList(0);
+ exception->semaphore=AllocateSemaphoreInfo();
exception->signature=MagickSignature;
}
@@ -612,7 +613,7 @@
assert(relative->signature == MagickSignature);
if (relative->exceptions == (void *) NULL)
return;
- AcquireSemaphoreInfo(&exception->semaphore);
+ LockSemaphoreInfo(exception->semaphore);
ResetLinkedListIterator((LinkedListInfo *) relative->exceptions);
p=(const ExceptionInfo *) GetNextValueInLinkedList((LinkedListInfo *)
relative->exceptions);
@@ -622,7 +623,7 @@
p=(const ExceptionInfo *) GetNextValueInLinkedList((LinkedListInfo *)
relative->exceptions);
}
- RelinquishSemaphoreInfo(exception->semaphore);
+ UnlockSemaphoreInfo(exception->semaphore);
}
/*
diff --git a/magick/gem.c b/magick/gem.c
index a53427c..eeb53ef 100644
--- a/magick/gem.c
+++ b/magick/gem.c
@@ -372,20 +372,16 @@
*brightness=(double) (QuantumScale*max);
if (delta == 0.0)
return;
- if (red == max)
- *hue=((((max-blue)/6.0)+(delta/2.0))-(((max-green)/6.0)+(delta/2.0)))/delta;
+ if ((MagickRealType) red == max)
+ *hue=(double) ((green-(MagickRealType) blue)/delta);
else
- if (green == max)
- *hue=(1.0/3.0)+((((max-red)/6.0)+(delta/2.0))-(((max-blue)/6.0)+
- (delta/2.0)))/delta;
+ if ((MagickRealType) green == max)
+ *hue=(double) (2.0+(blue-(MagickRealType) red)/delta);
else
- if (blue == max)
- *hue=(2.0/3.0)+((((max-green)/6.0)+(delta/2.0))-(((max-red)/6.0)+
- (delta/2.0)))/delta;
+ *hue=(double) (4.0+(red-(MagickRealType) green)/delta);
+ *hue/=6.0;
if (*hue < 0.0)
*hue+=1.0;
- if (*hue > 1.0)
- *hue-=1.0;
}
/*
diff --git a/magick/image.c b/magick/image.c
index 709c64a..7bda14a 100644
--- a/magick/image.c
+++ b/magick/image.c
@@ -1627,9 +1627,9 @@
assert(image->signature == MagickSignature);
if (image->debug != MagickFalse)
(void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",image->filename);
- AcquireSemaphoreInfo(&image->semaphore);
+ LockSemaphoreInfo(image->semaphore);
reference_count=image->reference_count;
- RelinquishSemaphoreInfo(image->semaphore);
+ UnlockSemaphoreInfo(image->semaphore);
return(reference_count);
}
@@ -2066,9 +2066,9 @@
if (GetImageReferenceCount(*image) <= 1)
return(MagickTrue);
clone_image=CloneImage(*image,0,0,MagickTrue,exception);
- AcquireSemaphoreInfo(&(*image)->semaphore);
+ LockSemaphoreInfo((*image)->semaphore);
(*image)->reference_count--;
- RelinquishSemaphoreInfo((*image)->semaphore);
+ UnlockSemaphoreInfo((*image)->semaphore);
*image=clone_image;
return(MagickTrue);
}
diff --git a/magick/locale.c b/magick/locale.c
index 5fa0dc2..cf4dda9 100644
--- a/magick/locale.c
+++ b/magick/locale.c
@@ -254,7 +254,7 @@
/*
Generate locale list.
*/
- AcquireSemaphoreInfo(&locale_semaphore);
+ LockSemaphoreInfo(locale_semaphore);
ResetSplayTreeIterator(locale_list);
p=(const LocaleInfo *) GetNextValueInSplayTree(locale_list);
for (i=0; p != (const LocaleInfo *) NULL; )
@@ -264,7 +264,7 @@
messages[i++]=p;
p=(const LocaleInfo *) GetNextValueInSplayTree(locale_list);
}
- RelinquishSemaphoreInfo(locale_semaphore);
+ UnlockSemaphoreInfo(locale_semaphore);
qsort((void *) messages,(size_t) i,sizeof(*messages),LocaleInfoCompare);
messages[i]=(LocaleInfo *) NULL;
*number_messages=(unsigned long) i;
@@ -342,13 +342,11 @@
p=GetLocaleInfo_("*",exception);
if (p == (const LocaleInfo *) NULL)
return((char **) NULL);
- AcquireSemaphoreInfo(&locale_semaphore);
- RelinquishSemaphoreInfo(locale_semaphore);
messages=(char **) AcquireQuantumMemory((size_t)
GetNumberOfNodesInSplayTree(locale_list)+1UL,sizeof(*messages));
if (messages == (char **) NULL)
return((char **) NULL);
- AcquireSemaphoreInfo(&locale_semaphore);
+ LockSemaphoreInfo(locale_semaphore);
p=(const LocaleInfo *) GetNextValueInSplayTree(locale_list);
for (i=0; p != (const LocaleInfo *) NULL; )
{
@@ -357,7 +355,7 @@
messages[i++]=ConstantString(p->tag);
p=(const LocaleInfo *) GetNextValueInSplayTree(locale_list);
}
- RelinquishSemaphoreInfo(locale_semaphore);
+ UnlockSemaphoreInfo(locale_semaphore);
qsort((void *) messages,(size_t) i,sizeof(*messages),LocaleTagCompare);
messages[i]=(char *) NULL;
*number_messages=(unsigned long) i;
@@ -552,6 +550,7 @@
(instantiate_locale == MagickFalse))
{
AcquireSemaphoreInfo(&locale_semaphore);
+ LockSemaphoreInfo(locale_semaphore);
if ((locale_list == (SplayTreeInfo *) NULL) &&
(instantiate_locale == MagickFalse))
{
@@ -579,7 +578,7 @@
locale=DestroyString(locale);
instantiate_locale=MagickTrue;
}
- RelinquishSemaphoreInfo(locale_semaphore);
+ UnlockSemaphoreInfo(locale_semaphore);
}
return(locale_list != (SplayTreeInfo *) NULL ? MagickTrue : MagickFalse);
}
@@ -1048,8 +1047,8 @@
*/
MagickExport MagickBooleanType LocaleComponentGenesis(void)
{
- AcquireSemaphoreInfo(&locale_semaphore);
- RelinquishSemaphoreInfo(locale_semaphore);
+ assert(locale_semaphore == (SemaphoreInfo *) NULL);
+ locale_semaphore=AllocateSemaphoreInfo();
return(MagickTrue);
}
@@ -1073,10 +1072,12 @@
*/
MagickExport void LocaleComponentTerminus(void)
{
- AcquireSemaphoreInfo(&locale_semaphore);
+ if (locale_semaphore == (SemaphoreInfo *) NULL)
+ AcquireSemaphoreInfo(&locale_semaphore);
+ LockSemaphoreInfo(locale_semaphore);
if (locale_list != (SplayTreeInfo *) NULL)
locale_list=DestroySplayTree(locale_list);
instantiate_locale=MagickFalse;
- RelinquishSemaphoreInfo(locale_semaphore);
+ UnlockSemaphoreInfo(locale_semaphore);
DestroySemaphoreInfo(&locale_semaphore);
}
diff --git a/magick/log.c b/magick/log.c
index 05429e9..dad845b 100644
--- a/magick/log.c
+++ b/magick/log.c
@@ -225,7 +225,7 @@
exception=AcquireExceptionInfo();
log_info=GetLogInfo("*",exception);
exception=DestroyExceptionInfo(exception);
- AcquireSemaphoreInfo(&log_semaphore);
+ LockSemaphoreInfo(log_semaphore);
if (log_info->file != (FILE *) NULL)
{
if (log_info->append == MagickFalse)
@@ -233,7 +233,7 @@
(void) fclose(log_info->file);
log_info->file=(FILE *) NULL;
}
- RelinquishSemaphoreInfo(log_semaphore);
+ UnlockSemaphoreInfo(log_semaphore);
}
/*
@@ -278,7 +278,7 @@
/*
Search for log tag.
*/
- AcquireSemaphoreInfo(&log_semaphore);
+ LockSemaphoreInfo(log_semaphore);
ResetLinkedListIterator(log_list);
p=(LogInfo *) GetNextValueInLinkedList(log_list);
while (p != (LogInfo *) NULL)
@@ -290,7 +290,7 @@
if (p != (LogInfo *) NULL)
(void) InsertValueInLinkedList(log_list,0,
RemoveElementByValueFromLinkedList(log_list,p));
- RelinquishSemaphoreInfo(log_semaphore);
+ UnlockSemaphoreInfo(log_semaphore);
return(p);
}
@@ -371,7 +371,7 @@
/*
Generate log list.
*/
- AcquireSemaphoreInfo(&log_semaphore);
+ LockSemaphoreInfo(log_semaphore);
ResetLinkedListIterator(log_list);
p=(const LogInfo *) GetNextValueInLinkedList(log_list);
for (i=0; p != (const LogInfo *) NULL; )
@@ -381,7 +381,7 @@
preferences[i++]=p;
p=(const LogInfo *) GetNextValueInLinkedList(log_list);
}
- RelinquishSemaphoreInfo(log_semaphore);
+ UnlockSemaphoreInfo(log_semaphore);
qsort((void *) preferences,(size_t) i,sizeof(*preferences),LogInfoCompare);
preferences[i]=(LogInfo *) NULL;
*number_preferences=(unsigned long) i;
@@ -464,7 +464,7 @@
/*
Generate log list.
*/
- AcquireSemaphoreInfo(&log_semaphore);
+ LockSemaphoreInfo(log_semaphore);
ResetLinkedListIterator(log_list);
p=(const LogInfo *) GetNextValueInLinkedList(log_list);
for (i=0; p != (const LogInfo *) NULL; )
@@ -474,7 +474,7 @@
preferences[i++]=ConstantString(p->name);
p=(const LogInfo *) GetNextValueInLinkedList(log_list);
}
- RelinquishSemaphoreInfo(log_semaphore);
+ UnlockSemaphoreInfo(log_semaphore);
qsort((void *) preferences,(size_t) i,sizeof(*preferences),LogCompare);
preferences[i]=(char *) NULL;
*number_preferences=(unsigned long) i;
@@ -531,13 +531,14 @@
if ((log_list == (LinkedListInfo *) NULL) && (instantiate_log == MagickFalse))
{
AcquireSemaphoreInfo(&log_semaphore);
+ LockSemaphoreInfo(log_semaphore);
if ((log_list == (LinkedListInfo *) NULL) &&
(instantiate_log == MagickFalse))
{
(void) LoadLogLists(LogFilename,exception);
instantiate_log=MagickTrue;
}
- RelinquishSemaphoreInfo(log_semaphore);
+ UnlockSemaphoreInfo(log_semaphore);
}
return(log_list != (LinkedListInfo *) NULL ? MagickTrue : MagickFalse);
}
@@ -682,8 +683,8 @@
*/
MagickExport MagickBooleanType LogComponentGenesis(void)
{
- AcquireSemaphoreInfo(&log_semaphore);
- RelinquishSemaphoreInfo(log_semaphore);
+ assert(log_semaphore == (SemaphoreInfo *) NULL);
+ log_semaphore=AllocateSemaphoreInfo();
return(MagickTrue);
}
@@ -734,11 +735,13 @@
MagickExport void LogComponentTerminus(void)
{
- AcquireSemaphoreInfo(&log_semaphore);
+ if (log_semaphore == (SemaphoreInfo *) NULL)
+ AcquireSemaphoreInfo(&log_semaphore);
+ LockSemaphoreInfo(log_semaphore);
if (log_list != (LinkedListInfo *) NULL)
log_list=DestroyLinkedList(log_list,DestroyLogElement);
instantiate_log=MagickFalse;
- RelinquishSemaphoreInfo(log_semaphore);
+ UnlockSemaphoreInfo(log_semaphore);
DestroySemaphoreInfo(&log_semaphore);
}
@@ -1123,10 +1126,10 @@
exception=AcquireExceptionInfo();
log_info=(LogInfo *) GetLogInfo("*",exception);
exception=DestroyExceptionInfo(exception);
- AcquireSemaphoreInfo(&log_semaphore);
+ LockSemaphoreInfo(log_semaphore);
if ((log_info->event_mask & type) == 0)
{
- RelinquishSemaphoreInfo(log_semaphore);
+ UnlockSemaphoreInfo(log_semaphore);
return(MagickTrue);
}
domain=MagickOptionToMnemonic(MagickLogEventOptions,type);
@@ -1141,7 +1144,7 @@
if (text == (char *) NULL)
{
(void) ContinueTimer((TimerInfo *) &log_info->timer);
- RelinquishSemaphoreInfo(log_semaphore);
+ UnlockSemaphoreInfo(log_semaphore);
return(MagickFalse);
}
if ((log_info->handler_mask & ConsoleHandler) != 0)
@@ -1184,7 +1187,7 @@
if (filename == (char *) NULL)
{
(void) ContinueTimer((TimerInfo *) &log_info->timer);
- RelinquishSemaphoreInfo(log_semaphore);
+ UnlockSemaphoreInfo(log_semaphore);
return(MagickFalse);
}
log_info->append=IsPathAccessible(filename);
@@ -1192,7 +1195,7 @@
filename=(char *) RelinquishMagickMemory(filename);
if (log_info->file == (FILE *) NULL)
{
- RelinquishSemaphoreInfo(log_semaphore);
+ UnlockSemaphoreInfo(log_semaphore);
return(MagickFalse);
}
log_info->generation++;
@@ -1218,7 +1221,7 @@
}
text=(char *) RelinquishMagickMemory(text);
(void) ContinueTimer((TimerInfo *) &log_info->timer);
- RelinquishSemaphoreInfo(log_semaphore);
+ UnlockSemaphoreInfo(log_semaphore);
return(MagickTrue);
}
@@ -1681,12 +1684,12 @@
log_info=(LogInfo *) GetLogInfo("*",exception);
exception=DestroyExceptionInfo(exception);
option=ParseMagickOption(MagickLogEventOptions,MagickTrue,events);
- AcquireSemaphoreInfo(&log_semaphore);
+ LockSemaphoreInfo(log_semaphore);
log_info=(LogInfo *) GetValueFromLinkedList(log_list,0);
log_info->event_mask=(LogEventType) option;
if (option == -1)
log_info->event_mask=UndefinedEvents;
- RelinquishSemaphoreInfo(log_semaphore);
+ UnlockSemaphoreInfo(log_semaphore);
return(log_info->event_mask);
}
@@ -1723,11 +1726,11 @@
exception=AcquireExceptionInfo();
log_info=(LogInfo *) GetLogInfo("*",exception);
exception=DestroyExceptionInfo(exception);
- AcquireSemaphoreInfo(&log_semaphore);
+ LockSemaphoreInfo(log_semaphore);
if (log_info->format != (char *) NULL)
log_info->format=DestroyString(log_info->format);
log_info->format=ConstantString(format);
- RelinquishSemaphoreInfo(log_semaphore);
+ UnlockSemaphoreInfo(log_semaphore);
}
/*
diff --git a/magick/magic.c b/magick/magic.c
index 0ef4c87..83f290a 100644
--- a/magick/magic.c
+++ b/magick/magic.c
@@ -259,7 +259,7 @@
/*
Search for magic tag.
*/
- AcquireSemaphoreInfo(&magic_semaphore);
+ LockSemaphoreInfo(magic_semaphore);
ResetLinkedListIterator(magic_list);
p=(const MagicInfo *) GetNextValueInLinkedList(magic_list);
while (p != (const MagicInfo *) NULL)
@@ -273,7 +273,7 @@
if (p != (const MagicInfo *) NULL)
(void) InsertValueInLinkedList(magic_list,0,
RemoveElementByValueFromLinkedList(magic_list,p));
- RelinquishSemaphoreInfo(magic_semaphore);
+ UnlockSemaphoreInfo(magic_semaphore);
return(p);
}
@@ -356,7 +356,7 @@
/*
Generate magic list.
*/
- AcquireSemaphoreInfo(&magic_semaphore);
+ LockSemaphoreInfo(magic_semaphore);
ResetLinkedListIterator(magic_list);
p=(const MagicInfo *) GetNextValueInLinkedList(magic_list);
for (i=0; p != (const MagicInfo *) NULL; )
@@ -366,7 +366,7 @@
aliases[i++]=p;
p=(const MagicInfo *) GetNextValueInLinkedList(magic_list);
}
- RelinquishSemaphoreInfo(magic_semaphore);
+ UnlockSemaphoreInfo(magic_semaphore);
qsort((void *) aliases,(size_t) i,sizeof(*aliases),MagicInfoCompare);
aliases[i]=(MagicInfo *) NULL;
*number_aliases=(unsigned long) i;
@@ -448,7 +448,7 @@
GetNumberOfElementsInLinkedList(magic_list)+1UL,sizeof(*aliases));
if (aliases == (char **) NULL)
return((char **) NULL);
- AcquireSemaphoreInfo(&magic_semaphore);
+ LockSemaphoreInfo(magic_semaphore);
ResetLinkedListIterator(magic_list);
p=(const MagicInfo *) GetNextValueInLinkedList(magic_list);
for (i=0; p != (const MagicInfo *) NULL; )
@@ -458,7 +458,7 @@
aliases[i++]=ConstantString(p->name);
p=(const MagicInfo *) GetNextValueInLinkedList(magic_list);
}
- RelinquishSemaphoreInfo(magic_semaphore);
+ UnlockSemaphoreInfo(magic_semaphore);
qsort((void *) aliases,(size_t) i,sizeof(*aliases),MagicCompare);
aliases[i]=(char *) NULL;
*number_aliases=(unsigned long) i;
@@ -523,13 +523,14 @@
(instantiate_magic == MagickFalse))
{
AcquireSemaphoreInfo(&magic_semaphore);
+ LockSemaphoreInfo(magic_semaphore);
if ((magic_list == (LinkedListInfo *) NULL) &&
(instantiate_magic == MagickFalse))
{
(void) LoadMagicLists(MagicFilename,exception);
instantiate_magic=MagickTrue;
}
- RelinquishSemaphoreInfo(magic_semaphore);
+ UnlockSemaphoreInfo(magic_semaphore);
}
return(magic_list != (LinkedListInfo *) NULL ? MagickTrue : MagickFalse);
}
@@ -1010,8 +1011,8 @@
*/
MagickExport MagickBooleanType MagicComponentGenesis(void)
{
- AcquireSemaphoreInfo(&magic_semaphore);
- RelinquishSemaphoreInfo(magic_semaphore);
+ assert(magic_semaphore == (SemaphoreInfo *) NULL);
+ magic_semaphore=AllocateSemaphoreInfo();
return(MagickTrue);
}
@@ -1057,10 +1058,12 @@
MagickExport void MagicComponentTerminus(void)
{
- AcquireSemaphoreInfo(&magic_semaphore);
+ if (magic_semaphore == (SemaphoreInfo *) NULL)
+ AcquireSemaphoreInfo(&magic_semaphore);
+ LockSemaphoreInfo(magic_semaphore);
if (magic_list != (LinkedListInfo *) NULL)
magic_list=DestroyLinkedList(magic_list,DestroyMagicElement);
instantiate_magic=MagickFalse;
- RelinquishSemaphoreInfo(magic_semaphore);
+ UnlockSemaphoreInfo(magic_semaphore);
DestroySemaphoreInfo(&magic_semaphore);
}
diff --git a/magick/magick.c b/magick/magick.c
index 678330c..4ea2961 100644
--- a/magick/magick.c
+++ b/magick/magick.c
@@ -228,7 +228,7 @@
if (p == (const MagickInfo *) NULL)
return(MagickFalse);
status=MagickFalse;
- AcquireSemaphoreInfo(&magick_semaphore);
+ LockSemaphoreInfo(magick_semaphore);
ResetSplayTreeIterator(magick_list);
p=(const MagickInfo *) GetNextValueInSplayTree(magick_list);
while (p != (const MagickInfo *) NULL)
@@ -242,7 +242,7 @@
}
p=(const MagickInfo *) GetNextValueInSplayTree(magick_list);
}
- RelinquishSemaphoreInfo(magick_semaphore);
+ UnlockSemaphoreInfo(magick_semaphore);
return(status);
}
@@ -412,16 +412,16 @@
if (LocaleCompare(name,"*") == 0)
(void) OpenModules(exception);
#endif
- AcquireSemaphoreInfo(&magick_semaphore);
+ LockSemaphoreInfo(magick_semaphore);
ResetSplayTreeIterator(magick_list);
p=(const MagickInfo *) GetNextValueInSplayTree(magick_list);
- RelinquishSemaphoreInfo(magick_semaphore);
+ UnlockSemaphoreInfo(magick_semaphore);
return(p);
}
/*
Find name in list.
*/
- AcquireSemaphoreInfo(&magick_semaphore);
+ LockSemaphoreInfo(magick_semaphore);
ResetSplayTreeIterator(magick_list);
p=(const MagickInfo *) GetNextValueInSplayTree(magick_list);
while (p != (const MagickInfo *) NULL)
@@ -445,7 +445,7 @@
}
}
#endif
- RelinquishSemaphoreInfo(magick_semaphore);
+ UnlockSemaphoreInfo(magick_semaphore);
return(p);
}
@@ -526,7 +526,7 @@
/*
Generate magick list.
*/
- AcquireSemaphoreInfo(&magick_semaphore);
+ LockSemaphoreInfo(magick_semaphore);
ResetSplayTreeIterator(magick_list);
p=(const MagickInfo *) GetNextValueInSplayTree(magick_list);
for (i=0; p != (const MagickInfo *) NULL; )
@@ -536,7 +536,7 @@
formats[i++]=p;
p=(const MagickInfo *) GetNextValueInSplayTree(magick_list);
}
- RelinquishSemaphoreInfo(magick_semaphore);
+ UnlockSemaphoreInfo(magick_semaphore);
qsort((void *) formats,(size_t) i,sizeof(*formats),MagickInfoCompare);
formats[i]=(MagickInfo *) NULL;
*number_formats=(unsigned long) i;
@@ -616,7 +616,7 @@
GetNumberOfNodesInSplayTree(magick_list)+1UL,sizeof(*formats));
if (formats == (char **) NULL)
return((char **) NULL);
- AcquireSemaphoreInfo(&magick_semaphore);
+ LockSemaphoreInfo(magick_semaphore);
ResetSplayTreeIterator(magick_list);
p=(const MagickInfo *) GetNextValueInSplayTree(magick_list);
for (i=0; p != (const MagickInfo *) NULL; )
@@ -626,7 +626,7 @@
formats[i++]=ConstantString(p->name);
p=(const MagickInfo *) GetNextValueInSplayTree(magick_list);
}
- RelinquishSemaphoreInfo(magick_semaphore);
+ UnlockSemaphoreInfo(magick_semaphore);
qsort((void *) formats,(size_t) i,sizeof(*formats),MagickCompare);
formats[i]=(char *) NULL;
*number_formats=(unsigned long) i;
@@ -776,6 +776,7 @@
(instantiate_magick == MagickFalse))
{
AcquireSemaphoreInfo(&magick_semaphore);
+ LockSemaphoreInfo(magick_semaphore);
if ((magick_list == (SplayTreeInfo *) NULL) &&
(instantiate_magick == MagickFalse))
{
@@ -817,7 +818,7 @@
#endif
instantiate_magick=MagickTrue;
}
- RelinquishSemaphoreInfo(magick_semaphore);
+ UnlockSemaphoreInfo(magick_semaphore);
}
return(magick_list != (SplayTreeInfo *) NULL ? MagickTrue : MagickFalse);
}
@@ -1029,8 +1030,8 @@
*/
MagickExport MagickBooleanType MagickComponentGenesis(void)
{
- AcquireSemaphoreInfo(&magick_semaphore);
- RelinquishSemaphoreInfo(magick_semaphore);
+ assert(magick_semaphore == (SemaphoreInfo *) NULL);
+ magick_semaphore=AllocateSemaphoreInfo();
return(MagickTrue);
}
@@ -1054,11 +1055,13 @@
*/
MagickExport void MagickComponentTerminus(void)
{
- AcquireSemaphoreInfo(&magick_semaphore);
+ if (magick_semaphore == (SemaphoreInfo *) NULL)
+ AcquireSemaphoreInfo(&magick_semaphore);
+ LockSemaphoreInfo(magick_semaphore);
if (magick_list != (SplayTreeInfo *) NULL)
magick_list=DestroySplayTree(magick_list);
instantiate_magick=MagickFalse;
- RelinquishSemaphoreInfo(magick_semaphore);
+ UnlockSemaphoreInfo(magick_semaphore);
DestroySemaphoreInfo(&magick_semaphore);
}
@@ -1261,6 +1264,7 @@
/*
Instantiate magick resources.
*/
+ (void) ConfigureComponentGenesis();
(void) PolicyComponentGenesis();
(void) CacheComponentGenesis();
(void) RegistryComponentGenesis();
@@ -1274,7 +1278,6 @@
(void) MagicComponentGenesis();
(void) ColorComponentGenesis();
(void) TypeComponentGenesis();
- (void) ConfigureComponentGenesis();
(void) MimeComponentGenesis();
(void) ConstituteComponentGenesis();
(void) XComponentGenesis();
@@ -1305,7 +1308,6 @@
#endif
ConstituteComponentTerminus();
MimeComponentTerminus();
- ConfigureComponentTerminus();
TypeComponentTerminus();
ColorComponentTerminus();
#if defined(__WINDOWS__)
@@ -1325,6 +1327,7 @@
RegistryComponentTerminus();
CacheComponentTerminus();
PolicyComponentTerminus();
+ ConfigureComponentTerminus();
RandomComponentTerminus();
LocaleComponentTerminus();
LogComponentTerminus();
@@ -1461,7 +1464,7 @@
return(MagickFalse);
if (GetNumberOfNodesInSplayTree(magick_list) == 0)
return(MagickFalse);
- AcquireSemaphoreInfo(&magick_semaphore);
+ LockSemaphoreInfo(magick_semaphore);
ResetSplayTreeIterator(magick_list);
p=(const MagickInfo *) GetNextValueInSplayTree(magick_list);
while (p != (const MagickInfo *) NULL)
@@ -1471,6 +1474,6 @@
p=(const MagickInfo *) GetNextValueInSplayTree(magick_list);
}
status=DeleteNodeByValueFromSplayTree(magick_list,p);
- RelinquishSemaphoreInfo(magick_semaphore);
+ UnlockSemaphoreInfo(magick_semaphore);
return(status);
}
diff --git a/magick/memory.c b/magick/memory.c
index 095c195..26f29ff 100644
--- a/magick/memory.c
+++ b/magick/memory.c
@@ -391,7 +391,7 @@
#else
if (free_segments == (DataSegmentInfo *) NULL)
{
- AcquireSemaphoreInfo(&memory_semaphore);
+ LockSemaphoreInfo(memory_semaphore);
if (free_segments == (DataSegmentInfo *) NULL)
{
register long
@@ -411,16 +411,16 @@
}
free_segments=(&memory_info.segment_pool[0]);
}
- RelinquishSemaphoreInfo(memory_semaphore);
+ UnlockSemaphoreInfo(memory_semaphore);
}
- AcquireSemaphoreInfo(&memory_semaphore);
+ LockSemaphoreInfo(memory_semaphore);
memory=AcquireBlock(size == 0 ? 1UL : size);
if (memory == (void *) NULL)
{
if (ExpandHeap(size == 0 ? 1UL : size) != MagickFalse)
memory=AcquireBlock(size == 0 ? 1UL : size);
}
- RelinquishSemaphoreInfo(memory_semaphore);
+ UnlockSemaphoreInfo(memory_semaphore);
#endif
return(memory);
}
@@ -546,8 +546,8 @@
register long
i;
- AcquireSemaphoreInfo(&memory_semaphore);
- RelinquishSemaphoreInfo(memory_semaphore);
+ LockSemaphoreInfo(memory_semaphore);
+ UnlockSemaphoreInfo(memory_semaphore);
for (i=0; i < (long) memory_info.number_segments; i++)
if (memory_info.segments[i]->mapped == MagickFalse)
memory_methods.destroy_memory_handler(
@@ -742,7 +742,7 @@
#else
assert((SizeOfBlock(memory) % (4*sizeof(size_t))) == 0);
assert((*BlockHeader(NextBlock(memory)) & PreviousBlockBit) != 0);
- AcquireSemaphoreInfo(&memory_semaphore);
+ LockSemaphoreInfo(memory_semaphore);
if ((*BlockHeader(memory) & PreviousBlockBit) == 0)
{
void
@@ -773,7 +773,7 @@
*BlockFooter(memory,SizeOfBlock(memory))=SizeOfBlock(memory);
*BlockHeader(NextBlock(memory))&=(~PreviousBlockBit);
InsertFreeBlock(memory,AllocationPolicy(SizeOfBlock(memory)));
- RelinquishSemaphoreInfo(memory_semaphore);
+ UnlockSemaphoreInfo(memory_semaphore);
#endif
return((void *) NULL);
}
@@ -870,20 +870,20 @@
if (block == (void *) NULL)
memory=RelinquishMagickMemory(memory);
#else
- AcquireSemaphoreInfo(&memory_semaphore);
+ LockSemaphoreInfo(memory_semaphore);
block=ResizeBlock(memory,size == 0 ? 1UL : size);
if (block == (void *) NULL)
{
if (ExpandHeap(size == 0 ? 1UL : size) == MagickFalse)
{
- RelinquishSemaphoreInfo(memory_semaphore);
+ UnlockSemaphoreInfo(memory_semaphore);
memory=RelinquishMagickMemory(memory);
ThrowFatalException(ResourceLimitFatalError,"MemoryAllocationFailed");
}
block=ResizeBlock(memory,size == 0 ? 1UL : size);
assert(block != (void *) NULL);
}
- RelinquishSemaphoreInfo(memory_semaphore);
+ UnlockSemaphoreInfo(memory_semaphore);
memory=RelinquishMagickMemory(memory);
#endif
return(block);
diff --git a/magick/mime.c b/magick/mime.c
index 7e151fd..c53b684 100644
--- a/magick/mime.c
+++ b/magick/mime.c
@@ -200,7 +200,7 @@
*/
mime_info=(const MimeInfo *) NULL;
lsb_first=1;
- AcquireSemaphoreInfo(&mime_semaphore);
+ LockSemaphoreInfo(mime_semaphore);
ResetLinkedListIterator(mime_list);
p=(const MimeInfo *) GetNextValueInLinkedList(mime_list);
while (p != (const MimeInfo *) NULL)
@@ -324,7 +324,7 @@
if (p != (const MimeInfo *) NULL)
(void) InsertValueInLinkedList(mime_list,0,
RemoveElementByValueFromLinkedList(mime_list,p));
- RelinquishSemaphoreInfo(mime_semaphore);
+ UnlockSemaphoreInfo(mime_semaphore);
return(mime_info);
}
@@ -408,7 +408,7 @@
/*
Generate mime list.
*/
- AcquireSemaphoreInfo(&mime_semaphore);
+ LockSemaphoreInfo(mime_semaphore);
ResetLinkedListIterator(mime_list);
p=(const MimeInfo *) GetNextValueInLinkedList(mime_list);
for (i=0; p != (const MimeInfo *) NULL; )
@@ -418,7 +418,7 @@
aliases[i++]=p;
p=(const MimeInfo *) GetNextValueInLinkedList(mime_list);
}
- RelinquishSemaphoreInfo(mime_semaphore);
+ UnlockSemaphoreInfo(mime_semaphore);
qsort((void *) aliases,(size_t) i,sizeof(*aliases),MimeInfoCompare);
aliases[i]=(MimeInfo *) NULL;
*number_aliases=(unsigned long) i;
@@ -500,7 +500,7 @@
GetNumberOfElementsInLinkedList(mime_list)+1UL,sizeof(*aliases));
if (aliases == (char **) NULL)
return((char **) NULL);
- AcquireSemaphoreInfo(&mime_semaphore);
+ LockSemaphoreInfo(mime_semaphore);
ResetLinkedListIterator(mime_list);
p=(const MimeInfo *) GetNextValueInLinkedList(mime_list);
for (i=0; p != (const MimeInfo *) NULL; )
@@ -510,7 +510,7 @@
aliases[i++]=ConstantString(p->type);
p=(const MimeInfo *) GetNextValueInLinkedList(mime_list);
}
- RelinquishSemaphoreInfo(mime_semaphore);
+ UnlockSemaphoreInfo(mime_semaphore);
qsort((void *) aliases,(size_t) i,sizeof(*aliases),MimeCompare);
aliases[i]=(char *) NULL;
*number_aliases=(unsigned long) i;
@@ -605,13 +605,14 @@
(instantiate_mime == MagickFalse))
{
AcquireSemaphoreInfo(&mime_semaphore);
+ LockSemaphoreInfo(mime_semaphore);
if ((mime_list == (LinkedListInfo *) NULL) &&
(instantiate_mime == MagickFalse))
{
(void) LoadMimeLists(MimeFilename,exception);
instantiate_mime=MagickTrue;
}
- RelinquishSemaphoreInfo(mime_semaphore);
+ UnlockSemaphoreInfo(mime_semaphore);
}
return(mime_list != (LinkedListInfo *) NULL ? MagickTrue : MagickFalse);
}
@@ -1050,8 +1051,8 @@
*/
MagickExport MagickBooleanType MimeComponentGenesis(void)
{
- AcquireSemaphoreInfo(&mime_semaphore);
- RelinquishSemaphoreInfo(mime_semaphore);
+ assert(mime_semaphore == (SemaphoreInfo *) NULL);
+ mime_semaphore=AllocateSemaphoreInfo();
return(MagickTrue);
}
@@ -1096,10 +1097,12 @@
MagickExport void MimeComponentTerminus(void)
{
- AcquireSemaphoreInfo(&mime_semaphore);
+ if (mime_semaphore == (SemaphoreInfo *) NULL)
+ AcquireSemaphoreInfo(&mime_semaphore);
+ LockSemaphoreInfo(mime_semaphore);
if (mime_list != (LinkedListInfo *) NULL)
mime_list=DestroyLinkedList(mime_list,DestroyMimeElement);
instantiate_mime=MagickFalse;
- RelinquishSemaphoreInfo(mime_semaphore);
+ UnlockSemaphoreInfo(mime_semaphore);
DestroySemaphoreInfo(&mime_semaphore);
}
diff --git a/magick/module.c b/magick/module.c
index 4b6203e..ef3785c 100644
--- a/magick/module.c
+++ b/magick/module.c
@@ -175,7 +175,7 @@
/*
Destroy magick modules.
*/
- AcquireSemaphoreInfo(&module_semaphore);
+ LockSemaphoreInfo(module_semaphore);
#if defined(MAGICKCORE_MODULES_SUPPORT)
if (module_list != (SplayTreeInfo *) NULL)
module_list=DestroySplayTree(module_list);
@@ -183,7 +183,7 @@
(void) lt_dlexit();
#endif
instantiate_module=MagickFalse;
- RelinquishSemaphoreInfo(module_semaphore);
+ UnlockSemaphoreInfo(module_semaphore);
}
/*
@@ -232,10 +232,10 @@
if (LocaleCompare(tag,"*") == 0)
(void) OpenModules(exception);
#endif
- AcquireSemaphoreInfo(&module_semaphore);
+ LockSemaphoreInfo(module_semaphore);
ResetSplayTreeIterator(module_list);
p=(ModuleInfo *) GetNextValueInSplayTree(module_list);
- RelinquishSemaphoreInfo(module_semaphore);
+ UnlockSemaphoreInfo(module_semaphore);
return(p);
}
return((ModuleInfo *) GetValueFromSplayTree(module_list,tag));
@@ -319,7 +319,7 @@
/*
Generate module list.
*/
- AcquireSemaphoreInfo(&module_semaphore);
+ LockSemaphoreInfo(module_semaphore);
ResetSplayTreeIterator(module_list);
p=(const ModuleInfo *) GetNextValueInSplayTree(module_list);
for (i=0; p != (const ModuleInfo *) NULL; )
@@ -329,7 +329,7 @@
modules[i++]=p;
p=(const ModuleInfo *) GetNextValueInSplayTree(module_list);
}
- RelinquishSemaphoreInfo(module_semaphore);
+ UnlockSemaphoreInfo(module_semaphore);
qsort((void *) modules,(size_t) i,sizeof(*modules),ModuleInfoCompare);
modules[i]=(ModuleInfo *) NULL;
*number_modules=(unsigned long) i;
@@ -848,6 +848,7 @@
(instantiate_module == MagickFalse))
{
AcquireSemaphoreInfo(&module_semaphore);
+ LockSemaphoreInfo(module_semaphore);
if ((module_list == (SplayTreeInfo *) NULL) &&
(instantiate_module == MagickFalse))
{
@@ -873,7 +874,7 @@
"UnableToInitializeModuleLoader");
instantiate_module=MagickTrue;
}
- RelinquishSemaphoreInfo(module_semaphore);
+ UnlockSemaphoreInfo(module_semaphore);
}
return(module_list != (SplayTreeInfo *) NULL ? MagickTrue : MagickFalse);
}
@@ -1105,6 +1106,8 @@
ExceptionInfo
*exception;
+ assert(module_semaphore == (SemaphoreInfo *) NULL);
+ module_semaphore=AllocateSemaphoreInfo();
exception=AcquireExceptionInfo();
InitializeModuleList(exception);
exception=DestroyExceptionInfo(exception);
@@ -1131,6 +1134,8 @@
*/
MagickExport void ModuleComponentTerminus(void)
{
+ if (module_semaphore == (SemaphoreInfo *) NULL)
+ AcquireSemaphoreInfo(&module_semaphore);
DestroyModuleList();
DestroySemaphoreInfo(&module_semaphore);
}
diff --git a/magick/policy.c b/magick/policy.c
index fd31a38..0a1d997 100644
--- a/magick/policy.c
+++ b/magick/policy.c
@@ -192,7 +192,7 @@
/*
Search for policy tag.
*/
- AcquireSemaphoreInfo(&policy_semaphore);
+ LockSemaphoreInfo(policy_semaphore);
ResetLinkedListIterator(policy_list);
p=(PolicyInfo *) GetNextValueInLinkedList(policy_list);
while (p != (PolicyInfo *) NULL)
@@ -207,7 +207,7 @@
else
(void) InsertValueInLinkedList(policy_list,0,
RemoveElementByValueFromLinkedList(policy_list,p));
- RelinquishSemaphoreInfo(policy_semaphore);
+ UnlockSemaphoreInfo(policy_semaphore);
return(p);
}
@@ -267,7 +267,7 @@
/*
Generate policy list.
*/
- AcquireSemaphoreInfo(&policy_semaphore);
+ LockSemaphoreInfo(policy_semaphore);
ResetLinkedListIterator(policy_list);
p=(const PolicyInfo *) GetNextValueInLinkedList(policy_list);
for (i=0; p != (const PolicyInfo *) NULL; )
@@ -277,7 +277,7 @@
policies[i++]=p;
p=(const PolicyInfo *) GetNextValueInLinkedList(policy_list);
}
- RelinquishSemaphoreInfo(policy_semaphore);
+ UnlockSemaphoreInfo(policy_semaphore);
policies[i]=(PolicyInfo *) NULL;
*number_policies=(unsigned long) i;
return(policies);
@@ -339,7 +339,7 @@
/*
Generate policy list.
*/
- AcquireSemaphoreInfo(&policy_semaphore);
+ LockSemaphoreInfo(policy_semaphore);
ResetLinkedListIterator(policy_list);
p=(const PolicyInfo *) GetNextValueInLinkedList(policy_list);
for (i=0; p != (const PolicyInfo *) NULL; )
@@ -349,7 +349,7 @@
policies[i++]=ConstantString(p->name);
p=(const PolicyInfo *) GetNextValueInLinkedList(policy_list);
}
- RelinquishSemaphoreInfo(policy_semaphore);
+ UnlockSemaphoreInfo(policy_semaphore);
policies[i]=(char *) NULL;
*number_policies=(unsigned long) i;
return(policies);
@@ -429,13 +429,14 @@
(instantiate_policy == MagickFalse))
{
AcquireSemaphoreInfo(&policy_semaphore);
+ LockSemaphoreInfo(policy_semaphore);
if ((policy_list == (LinkedListInfo *) NULL) &&
(instantiate_policy == MagickFalse))
{
(void) LoadPolicyLists(PolicyFilename,exception);
instantiate_policy=MagickTrue;
}
- RelinquishSemaphoreInfo(policy_semaphore);
+ UnlockSemaphoreInfo(policy_semaphore);
}
return(policy_list != (LinkedListInfo *) NULL ? MagickTrue : MagickFalse);
}
@@ -493,7 +494,7 @@
if (policy_info == (PolicyInfo *) NULL)
return(MagickTrue);
authorized=MagickTrue;
- AcquireSemaphoreInfo(&policy_semaphore);
+ LockSemaphoreInfo(policy_semaphore);
ResetLinkedListIterator(policy_list);
p=(PolicyInfo *) GetNextValueInLinkedList(policy_list);
while ((p != (PolicyInfo *) NULL) && (authorized != MagickFalse))
@@ -513,7 +514,7 @@
}
p=(PolicyInfo *) GetNextValueInLinkedList(policy_list);
}
- RelinquishSemaphoreInfo(policy_semaphore);
+ UnlockSemaphoreInfo(policy_semaphore);
return(authorized);
}
@@ -964,8 +965,8 @@
*/
MagickExport MagickBooleanType PolicyComponentGenesis(void)
{
- AcquireSemaphoreInfo(&policy_semaphore);
- RelinquishSemaphoreInfo(policy_semaphore);
+ assert(policy_semaphore == (SemaphoreInfo *) NULL);
+ policy_semaphore=AllocateSemaphoreInfo();
return(MagickTrue);
}
@@ -1011,10 +1012,12 @@
MagickExport void PolicyComponentTerminus(void)
{
- AcquireSemaphoreInfo(&policy_semaphore);
+ if (policy_semaphore == (SemaphoreInfo *) NULL)
+ AcquireSemaphoreInfo(&policy_semaphore);
+ LockSemaphoreInfo(policy_semaphore);
if (policy_list != (LinkedListInfo *) NULL)
policy_list=DestroyLinkedList(policy_list,DestroyPolicyElement);
instantiate_policy=MagickFalse;
- RelinquishSemaphoreInfo(policy_semaphore);
+ UnlockSemaphoreInfo(policy_semaphore);
DestroySemaphoreInfo(&policy_semaphore);
}
diff --git a/magick/random.c b/magick/random.c
index 2500cb6..3cd6075 100644
--- a/magick/random.c
+++ b/magick/random.c
@@ -689,7 +689,7 @@
% %
% %
% %
-+ R a n d o m C o m p o n e n t G e n e s i s %
++ R a n d o m C o m p o n e n t G e n e s i s %
% %
% %
% %
@@ -704,8 +704,8 @@
*/
MagickExport MagickBooleanType RandomComponentGenesis(void)
{
- AcquireSemaphoreInfo(&random_semaphore);
- RelinquishSemaphoreInfo(random_semaphore);
+ assert(random_semaphore == (SemaphoreInfo *) NULL);
+ random_semaphore=AllocateSemaphoreInfo();
return(MagickTrue);
}
@@ -729,8 +729,8 @@
*/
MagickExport void RandomComponentTerminus(void)
{
- AcquireSemaphoreInfo(&random_semaphore);
- (void) UnlockSemaphoreInfo(random_semaphore);
+ if (random_semaphore == (SemaphoreInfo *) NULL)
+ AcquireSemaphoreInfo(&random_semaphore);
DestroySemaphoreInfo(&random_semaphore);
}
diff --git a/magick/registry.c b/magick/registry.c
index 3e850a0..c69ef5e 100644
--- a/magick/registry.c
+++ b/magick/registry.c
@@ -299,8 +299,8 @@
*/
MagickExport MagickBooleanType RegistryComponentGenesis(void)
{
- AcquireSemaphoreInfo(®istry_semaphore);
- RelinquishSemaphoreInfo(registry_semaphore);
+ assert(registry_semaphore == (SemaphoreInfo *) NULL);
+ registry_semaphore=AllocateSemaphoreInfo();
return(MagickTrue);
}
@@ -324,13 +324,15 @@
*/
MagickExport void RegistryComponentTerminus(void)
{
- AcquireSemaphoreInfo(®istry_semaphore);
+ if (registry_semaphore == (SemaphoreInfo *) NULL)
+ AcquireSemaphoreInfo(®istry_semaphore);
+ LockSemaphoreInfo(registry_semaphore);
if (IsEventLogging() != MagickFalse)
(void) LogMagickEvent(TraceEvent,GetMagickModule(),"...");
if (registry != (void *) NULL)
registry=DestroySplayTree(registry);
instantiate_registry=MagickFalse;
- RelinquishSemaphoreInfo(registry_semaphore);
+ UnlockSemaphoreInfo(registry_semaphore);
DestroySemaphoreInfo(®istry_semaphore);
}
@@ -524,6 +526,7 @@
(instantiate_registry == MagickFalse))
{
AcquireSemaphoreInfo(®istry_semaphore);
+ LockSemaphoreInfo(registry_semaphore);
if ((registry == (SplayTreeInfo *) NULL) &&
(instantiate_registry == MagickFalse))
{
@@ -531,7 +534,7 @@
DestroyRegistryNode);
instantiate_registry=MagickTrue;
}
- RelinquishSemaphoreInfo(registry_semaphore);
+ UnlockSemaphoreInfo(registry_semaphore);
}
status=AddValueToSplayTree(registry,ConstantString(key),registry_info);
return(status);
diff --git a/magick/resource.c b/magick/resource.c
index 727283d..83c61b6 100644
--- a/magick/resource.c
+++ b/magick/resource.c
@@ -159,7 +159,9 @@
status=MagickFalse;
(void) FormatMagickSize(size,resource_request);
- AcquireSemaphoreInfo(&resource_semaphore);
+ if (resource_semaphore == (SemaphoreInfo *) NULL)
+ AcquireSemaphoreInfo(&resource_semaphore);
+ LockSemaphoreInfo(resource_semaphore);
switch (type)
{
case AreaResource:
@@ -253,7 +255,7 @@
default:
break;
}
- RelinquishSemaphoreInfo(resource_semaphore);
+ UnlockSemaphoreInfo(resource_semaphore);
(void) LogMagickEvent(ResourceEvent,GetMagickModule(),"%s: %s/%s/%s",
MagickOptionToMnemonic(MagickResourceOptions,(long) type),resource_request,
resource_current,resource_limit);
@@ -467,11 +469,13 @@
(void) LogMagickEvent(ResourceEvent,GetMagickModule(),"%s",path);
if (file == -1)
return(file);
- AcquireSemaphoreInfo(&resource_semaphore);
+ if (resource_semaphore == (SemaphoreInfo *) NULL)
+ AcquireSemaphoreInfo(&resource_semaphore);
+ LockSemaphoreInfo(resource_semaphore);
if (temporary_resources == (SplayTreeInfo *) NULL)
temporary_resources=NewSplayTree(CompareSplayTreeString,
RelinquishMagickMemory,DestroyTemporaryResources);
- RelinquishSemaphoreInfo(resource_semaphore);
+ UnlockSemaphoreInfo(resource_semaphore);
resource=ConstantString(path);
(void) AddValueToSplayTree(temporary_resources,resource,resource);
return(file);
@@ -505,7 +509,7 @@
resource;
resource=0;
- AcquireSemaphoreInfo(&resource_semaphore);
+ LockSemaphoreInfo(resource_semaphore);
switch (type)
{
case AreaResource:
@@ -546,7 +550,7 @@
default:
break;
}
- RelinquishSemaphoreInfo(resource_semaphore);
+ UnlockSemaphoreInfo(resource_semaphore);
return(resource);
}
@@ -578,7 +582,9 @@
resource;
resource=0;
- AcquireSemaphoreInfo(&resource_semaphore);
+ if (resource_semaphore == (SemaphoreInfo *) NULL)
+ AcquireSemaphoreInfo(&resource_semaphore);
+ LockSemaphoreInfo(resource_semaphore);
switch (type)
{
case AreaResource:
@@ -619,7 +625,7 @@
default:
break;
}
- RelinquishSemaphoreInfo(resource_semaphore);
+ UnlockSemaphoreInfo(resource_semaphore);
return(resource);
}
@@ -660,7 +666,9 @@
if (file == (const FILE *) NULL)
file=stdout;
- AcquireSemaphoreInfo(&resource_semaphore);
+ if (resource_semaphore == (SemaphoreInfo *) NULL)
+ AcquireSemaphoreInfo(&resource_semaphore);
+ LockSemaphoreInfo(resource_semaphore);
(void) FormatMagickSize(resource_info.area_limit,area_limit);
(void) FormatMagickSize(resource_info.memory_limit,memory_limit);
(void) FormatMagickSize(resource_info.map_limit,map_limit);
@@ -677,7 +685,7 @@
(unsigned long) resource_info.file_limit,area_limit,memory_limit,map_limit,
disk_limit,(unsigned long) resource_info.thread_limit,time_limit);
(void) fflush(file);
- RelinquishSemaphoreInfo(resource_semaphore);
+ UnlockSemaphoreInfo(resource_semaphore);
return(MagickTrue);
}
@@ -715,7 +723,9 @@
resource_request[MaxTextExtent];
(void) FormatMagickSize(size,resource_request);
- AcquireSemaphoreInfo(&resource_semaphore);
+ if (resource_semaphore == (SemaphoreInfo *) NULL)
+ AcquireSemaphoreInfo(&resource_semaphore);
+ LockSemaphoreInfo(resource_semaphore);
switch (type)
{
case AreaResource:
@@ -780,7 +790,7 @@
default:
break;
}
- RelinquishSemaphoreInfo(resource_semaphore);
+ UnlockSemaphoreInfo(resource_semaphore);
(void) LogMagickEvent(ResourceEvent,GetMagickModule(),"%s: %s/%s/%s",
MagickOptionToMnemonic(MagickResourceOptions,(long) type),resource_request,
resource_current,resource_limit);
@@ -892,8 +902,8 @@
/*
Set Magick resource limits.
*/
- AcquireSemaphoreInfo(&resource_semaphore);
- RelinquishSemaphoreInfo(resource_semaphore);
+ assert(resource_semaphore == (SemaphoreInfo *) NULL);
+ resource_semaphore=AllocateSemaphoreInfo();
pagesize=GetMagickPageSize();
pages=(-1);
#if defined(MAGICKCORE_HAVE_SYSCONF) && defined(_SC_PHYS_PAGES)
@@ -1013,12 +1023,14 @@
*/
MagickExport void ResourceComponentTerminus(void)
{
- AcquireSemaphoreInfo(&resource_semaphore);
+ if (resource_semaphore == (SemaphoreInfo *) NULL)
+ AcquireSemaphoreInfo(&resource_semaphore);
+ LockSemaphoreInfo(resource_semaphore);
if (temporary_resources != (SplayTreeInfo *) NULL)
temporary_resources=DestroySplayTree(temporary_resources);
if (random_info != (RandomInfo *) NULL)
random_info=DestroyRandomInfo(random_info);
- RelinquishSemaphoreInfo(resource_semaphore);
+ UnlockSemaphoreInfo(resource_semaphore);
DestroySemaphoreInfo(&resource_semaphore);
}
@@ -1050,7 +1062,9 @@
MagickExport MagickBooleanType SetMagickResourceLimit(const ResourceType type,
const MagickSizeType limit)
{
- AcquireSemaphoreInfo(&resource_semaphore);
+ if (resource_semaphore == (SemaphoreInfo *) NULL)
+ AcquireSemaphoreInfo(&resource_semaphore);
+ LockSemaphoreInfo(resource_semaphore);
switch (type)
{
case AreaResource:
@@ -1092,6 +1106,6 @@
default:
break;
}
- RelinquishSemaphoreInfo(resource_semaphore);
+ UnlockSemaphoreInfo(resource_semaphore);
return(MagickTrue);
}
diff --git a/magick/semaphore.c b/magick/semaphore.c
index 2af57a3..2b54484 100644
--- a/magick/semaphore.c
+++ b/magick/semaphore.c
@@ -118,7 +118,6 @@
if (*semaphore_info == (SemaphoreInfo *) NULL)
*semaphore_info=AllocateSemaphoreInfo();
UnlockMagickMutex();
- (void) LockSemaphoreInfo(*semaphore_info);
}
/*
diff --git a/magick/type.c b/magick/type.c
index f400d59..c08c425 100644
--- a/magick/type.c
+++ b/magick/type.c
@@ -270,7 +270,7 @@
(void) GetTypeInfo("*",exception);
if (type_list == (SplayTreeInfo *) NULL)
return((TypeInfo *) NULL);
- AcquireSemaphoreInfo(&type_semaphore);
+ LockSemaphoreInfo(type_semaphore);
ResetSplayTreeIterator(type_list);
type_info=(const TypeInfo *) NULL;
p=(const TypeInfo *) GetNextValueInSplayTree(type_list);
@@ -315,14 +315,14 @@
type_info=p;
break;
}
- RelinquishSemaphoreInfo(type_semaphore);
+ UnlockSemaphoreInfo(type_semaphore);
if (type_info != (const TypeInfo *) NULL)
return(type_info);
/*
Check for types in the same family.
*/
max_score=0;
- AcquireSemaphoreInfo(&type_semaphore);
+ LockSemaphoreInfo(type_semaphore);
ResetSplayTreeIterator(type_list);
p=(const TypeInfo *) GetNextValueInSplayTree(type_list);
while (p != (const TypeInfo *) NULL)
@@ -374,7 +374,7 @@
}
p=(const TypeInfo *) GetNextValueInSplayTree(type_list);
}
- RelinquishSemaphoreInfo(type_semaphore);
+ UnlockSemaphoreInfo(type_semaphore);
if (type_info != (const TypeInfo *) NULL)
return(type_info);
/*
@@ -485,7 +485,7 @@
/*
Generate type list.
*/
- AcquireSemaphoreInfo(&type_semaphore);
+ LockSemaphoreInfo(type_semaphore);
ResetSplayTreeIterator(type_list);
p=(const TypeInfo *) GetNextValueInSplayTree(type_list);
for (i=0; p != (const TypeInfo *) NULL; )
@@ -495,7 +495,7 @@
fonts[i++]=p;
p=(const TypeInfo *) GetNextValueInSplayTree(type_list);
}
- RelinquishSemaphoreInfo(type_semaphore);
+ UnlockSemaphoreInfo(type_semaphore);
qsort((void *) fonts,(size_t) i,sizeof(*fonts),TypeInfoCompare);
fonts[i]=(TypeInfo *) NULL;
*number_fonts=(unsigned long) i;
@@ -578,7 +578,7 @@
/*
Generate type list.
*/
- AcquireSemaphoreInfo(&type_semaphore);
+ LockSemaphoreInfo(type_semaphore);
ResetSplayTreeIterator(type_list);
p=(const TypeInfo *) GetNextValueInSplayTree(type_list);
for (i=0; p != (const TypeInfo *) NULL; )
@@ -588,7 +588,7 @@
fonts[i++]=ConstantString(p->name);
p=(const TypeInfo *) GetNextValueInSplayTree(type_list);
}
- RelinquishSemaphoreInfo(type_semaphore);
+ UnlockSemaphoreInfo(type_semaphore);
qsort((void *) fonts,(size_t) i,sizeof(*fonts),TypeCompare);
fonts[i]=(char *) NULL;
*number_fonts=(unsigned long) i;
@@ -772,6 +772,7 @@
(instantiate_type == MagickFalse))
{
AcquireSemaphoreInfo(&type_semaphore);
+ LockSemaphoreInfo(type_semaphore);
if ((type_list == (SplayTreeInfo *) NULL) &&
(instantiate_type == MagickFalse))
{
@@ -784,7 +785,7 @@
#endif
instantiate_type=MagickTrue;
}
- RelinquishSemaphoreInfo(type_semaphore);
+ UnlockSemaphoreInfo(type_semaphore);
}
return(type_list != (SplayTreeInfo *) NULL ? MagickTrue : MagickFalse);
}
@@ -1342,8 +1343,8 @@
*/
MagickExport MagickBooleanType TypeComponentGenesis(void)
{
- AcquireSemaphoreInfo(&type_semaphore);
- RelinquishSemaphoreInfo(type_semaphore);
+ assert(type_semaphore == (SemaphoreInfo *) NULL);
+ type_semaphore=AllocateSemaphoreInfo();
return(MagickTrue);
}
@@ -1367,10 +1368,12 @@
*/
MagickExport void TypeComponentTerminus(void)
{
- AcquireSemaphoreInfo(&type_semaphore);
+ if (type_semaphore == (SemaphoreInfo *) NULL)
+ AcquireSemaphoreInfo(&type_semaphore);
+ LockSemaphoreInfo(type_semaphore);
if (type_list != (SplayTreeInfo *) NULL)
type_list=DestroySplayTree(type_list);
instantiate_type=MagickFalse;
- RelinquishSemaphoreInfo(type_semaphore);
+ UnlockSemaphoreInfo(type_semaphore);
DestroySemaphoreInfo(&type_semaphore);
}