% September 2002 %
% %
% %
-% Copyright 1999-2010 ImageMagick Studio LLC, a non-profit organization %
+% Copyright 1999-2011 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 %
MagickULLConstant(0),
MagickULLConstant(0),
MagickULLConstant(0),
- MagickULLConstant(2048)*1024*1024,
+ MagickULLConstant(3072)*1024*1024/sizeof(PixelPacket),
MagickULLConstant(1536)*1024*1024,
- MagickULLConstant(8192)*1024*1024,
+ MagickULLConstant(3072)*1024*1024,
MagickResourceInfinity,
MagickULLConstant(768),
- MagickULLConstant(8),
+ MagickULLConstant(4),
MagickResourceInfinity
};
status=(resource_info.disk_limit == MagickResourceInfinity) ||
((MagickSizeType) resource_info.disk < limit) ?
MagickTrue : MagickFalse;
- (void) FormatMagickSize((MagickSizeType) resource_info.disk,MagickFalse,
+ (void) FormatMagickSize((MagickSizeType) resource_info.disk,MagickTrue,
resource_current);
- (void) FormatMagickSize(resource_info.disk_limit,MagickFalse,
+ (void) FormatMagickSize(resource_info.disk_limit,MagickTrue,
resource_limit);
break;
}
break;
}
UnlockSemaphoreInfo(resource_semaphore);
- (void) LogMagickEvent(ResourceEvent,GetMagickModule(),"%s: %sB/%sB/%sB",
- MagickOptionToMnemonic(MagickResourceOptions,(ssize_t) type),resource_request,
- resource_current,resource_limit);
+ (void) LogMagickEvent(ResourceEvent,GetMagickModule(),"%s: %s/%s/%s",
+ CommandOptionToMnemonic(MagickResourceOptions,(ssize_t) type),
+ resource_request,resource_current,resource_limit);
return(status);
}
\f
static void *DestroyTemporaryResources(void *temporary_resource)
{
(void) remove((char *) temporary_resource);
+ temporary_resource=DestroyString((char *) temporary_resource);
return((void *) NULL);
}
return(MagickTrue);
}
if (directory[strlen(directory)-1] == *DirectorySeparator)
- (void) FormatMagickString(path,MaxTextExtent,"%smagick-XXXXXXXX",directory);
+ (void) FormatLocaleString(path,MaxTextExtent,"%smagick-XXXXXXXX",directory);
else
- (void) FormatMagickString(path,MaxTextExtent,"%s%smagick-XXXXXXXX",
+ (void) FormatLocaleString(path,MaxTextExtent,"%s%smagick-XXXXXXXX",
directory,DirectorySeparator);
directory=DestroyString(directory);
if (*DirectorySeparator != '/')
# define TMP_MAX 238328
#endif
- char
- *resource;
-
int
c,
file;
Get temporary pathname.
*/
(void) GetPathTemplate(path);
+ key=GetRandomKey(random_info,2);
+ p=path+strlen(path)-8;
+ datum=GetStringInfoDatum(key);
+ for (i=0; i < (ssize_t) GetStringInfoLength(key); i++)
+ {
+ c=(int) (datum[i] & 0x3f);
+ *p++=portable_filename[c];
+ }
+ key=DestroyStringInfo(key);
#if defined(MAGICKCORE_HAVE_MKSTEMP)
file=mkstemp(path);
#if defined(__OS2__)
if (file != -1)
break;
#endif
- key=GetRandomKey(random_info,8);
- p=path+strlen(path)-8;
+ key=GetRandomKey(random_info,6);
+ p=path+strlen(path)-6;
datum=GetStringInfoDatum(key);
- for (i=0; i < 8; i++)
+ for (i=0; i < (ssize_t) GetStringInfoLength(key); i++)
{
c=(int) (datum[i] & 0x3f);
*p++=portable_filename[c];
}
key=DestroyStringInfo(key);
file=open(path,O_RDWR | O_CREAT | O_EXCL | O_BINARY | O_NOFOLLOW,S_MODE);
- if ((file > 0) || (errno != EEXIST))
+ if ((file >= 0) || (errno != EEXIST))
break;
}
(void) LogMagickEvent(ResourceEvent,GetMagickModule(),"%s",path);
LockSemaphoreInfo(resource_semaphore);
if (temporary_resources == (SplayTreeInfo *) NULL)
temporary_resources=NewSplayTree(CompareSplayTreeString,
- RelinquishMagickMemory,DestroyTemporaryResources);
+ DestroyTemporaryResources,(void *(*)(void *)) NULL);
UnlockSemaphoreInfo(resource_semaphore);
- resource=ConstantString(path);
- (void) AddValueToSplayTree(temporary_resources,resource,resource);
+ (void) AddValueToSplayTree(temporary_resources,ConstantString(path),
+ (const void *) NULL);
return(file);
}
\f
% %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
-% GetMagickResource() returns the specified resource limit.
+% GetMagickResourceLimit() returns the specified resource limit.
%
% The format of the GetMagickResourceLimit() method is:
%
(void) FormatMagickSize(resource_info.area_limit,MagickFalse,area_limit);
(void) FormatMagickSize(resource_info.memory_limit,MagickTrue,memory_limit);
(void) FormatMagickSize(resource_info.map_limit,MagickTrue,map_limit);
- (void) FormatMagickSize(resource_info.disk_limit,MagickFalse,disk_limit);
+ (void) CopyMagickString(disk_limit,"unlimited",MaxTextExtent);
+ if (resource_info.disk_limit != MagickResourceInfinity)
+ (void) FormatMagickSize(resource_info.disk_limit,MagickTrue,disk_limit);
(void) CopyMagickString(time_limit,"unlimited",MaxTextExtent);
if (resource_info.time_limit != MagickResourceInfinity)
- (void) FormatMagickString(time_limit,MaxTextExtent,"%lu",(unsigned long)
+ (void) FormatLocaleString(time_limit,MaxTextExtent,"%.20g",(double)
resource_info.time_limit);
- (void) fprintf(file,"File Area Memory Map"
+ (void) FormatLocaleFile(file,"File Area Memory Map"
" Disk Thread Time\n");
- (void) fprintf(file,"--------------------------------------------------------"
+ (void) FormatLocaleFile(file,"--------------------------------------------------------"
"-----------------------\n");
- (void) fprintf(file,"%4lu %10sB %10sB %10sB %10sB %6lu %11s\n",
- (unsigned long) resource_info.file_limit,area_limit,memory_limit,map_limit,
- disk_limit,(unsigned long) resource_info.thread_limit,time_limit);
+ (void) FormatLocaleFile(file,"%4g %10s %10s %10s %10s %6g %11s\n",(double)
+ resource_info.file_limit,area_limit,memory_limit,map_limit,disk_limit,
+ (double) resource_info.thread_limit,time_limit);
(void) fflush(file);
UnlockSemaphoreInfo(resource_semaphore);
return(MagickTrue);
case DiskResource:
{
resource_info.disk-=size;
- (void) FormatMagickSize((MagickSizeType) resource_info.disk,MagickFalse,
+ (void) FormatMagickSize((MagickSizeType) resource_info.disk,MagickTrue,
resource_current);
- (void) FormatMagickSize(resource_info.disk_limit,MagickFalse,
+ (void) FormatMagickSize(resource_info.disk_limit,MagickTrue,
resource_limit);
break;
}
break;
}
UnlockSemaphoreInfo(resource_semaphore);
- (void) LogMagickEvent(ResourceEvent,GetMagickModule(),"%s: %sB/%sB/%sB",
- MagickOptionToMnemonic(MagickResourceOptions,(ssize_t) type),resource_request,
- resource_current,resource_limit);
+ (void) LogMagickEvent(ResourceEvent,GetMagickModule(),"%s: %s/%s/%s",
+ CommandOptionToMnemonic(MagickResourceOptions,(ssize_t) type),
+ resource_request,resource_current,resource_limit);
}
\f
/*
%
*/
-static inline size_t MagickMax(const size_t x,
- const size_t y)
+static inline size_t MagickMax(const size_t x,const size_t y)
{
if (x > y)
return(x);
char
*limit;
+ MagickSizeType
+ memory;
+
ssize_t
files,
pages,
pagesize;
- MagickSizeType
- memory;
-
/*
Set Magick resource limits.
*/
#if defined(PixelCacheThreshold)
memory=PixelCacheThreshold;
#endif
- (void) SetMagickResourceLimit(AreaResource,2UL*memory);
- (void) SetMagickResourceLimit(MemoryResource,3UL*memory/2UL);
- (void) SetMagickResourceLimit(MapResource,4UL*memory);
+ (void) SetMagickResourceLimit(AreaResource,2*memory/sizeof(PixelPacket));
+ (void) SetMagickResourceLimit(MemoryResource,memory);
+ (void) SetMagickResourceLimit(MapResource,2*memory);
limit=GetEnvironmentValue("MAGICK_AREA_LIMIT");
if (limit == (char *) NULL)
limit=GetPolicyValue("area");
#endif
#if defined(MAGICKCORE_HAVE_GETDTABLESIZE) && defined(MAGICKCORE_POSIX_SUPPORT)
if (files < 0)
- files=getdtablesize();
+ files=(ssize_t) getdtablesize();
#endif
if (files < 0)
files=64;
limit=GetPolicyValue("thread");
if (limit != (char *) NULL)
{
- SetOpenMPMaximumThreads((int) StringToUnsignedLong(limit));
(void) SetMagickResourceLimit(ThreadResource,StringToSizeType(limit,
100.0));
limit=DestroyString(limit);
% o limit: the maximum limit for the resource.
%
*/
+
+static inline MagickSizeType MagickMin(const MagickSizeType x,
+ const MagickSizeType y)
+{
+ if (x < y)
+ return(x);
+ return(y);
+}
+
MagickExport MagickBooleanType SetMagickResourceLimit(const ResourceType type,
const MagickSizeType limit)
{
+ char
+ *value;
+
if (resource_semaphore == (SemaphoreInfo *) NULL)
AcquireSemaphoreInfo(&resource_semaphore);
LockSemaphoreInfo(resource_semaphore);
case AreaResource:
{
resource_info.area_limit=limit;
+ value=GetPolicyValue("area");
+ if (value != (char *) NULL)
+ resource_info.area_limit=MagickMin(limit,StringToSizeType(value,100.0));
break;
}
case MemoryResource:
{
resource_info.memory_limit=limit;
+ value=GetPolicyValue("memory");
+ if (value != (char *) NULL)
+ resource_info.memory_limit=MagickMin(limit,StringToSizeType(value,
+ 100.0));
break;
}
case MapResource:
{
resource_info.map_limit=limit;
+ value=GetPolicyValue("map");
+ if (value != (char *) NULL)
+ resource_info.map_limit=MagickMin(limit,StringToSizeType(value,100.0));
break;
}
case DiskResource:
{
resource_info.disk_limit=limit;
+ value=GetPolicyValue("disk");
+ if (value != (char *) NULL)
+ resource_info.disk_limit=MagickMin(limit,StringToSizeType(value,100.0));
break;
}
case FileResource:
{
resource_info.file_limit=limit;
+ value=GetPolicyValue("file");
+ if (value != (char *) NULL)
+ resource_info.file_limit=MagickMin(limit,StringToSizeType(value,100.0));
break;
}
case ThreadResource:
{
- SetOpenMPMaximumThreads((int) limit);
- resource_info.thread_limit=GetOpenMPMaximumThreads();
+ resource_info.thread_limit=limit;
+ value=GetPolicyValue("thread");
+ if (value != (char *) NULL)
+ resource_info.thread_limit=MagickMin(limit,StringToSizeType(value,
+ 100.0));
+ SetOpenMPMaximumThreads((int) resource_info.thread_limit);
break;
}
case TimeResource:
{
resource_info.time_limit=limit;
+ value=GetPolicyValue("time");
+ if (value != (char *) NULL)
+ resource_info.time_limit=MagickMin(limit,StringToSizeType(value,100.0));
break;
}
default: