]> granicus.if.org Git - imagemagick/commitdiff
(no commit message)
authorcristy <urban-warrior@git.imagemagick.org>
Tue, 23 Nov 2010 13:49:46 +0000 (13:49 +0000)
committercristy <urban-warrior@git.imagemagick.org>
Tue, 23 Nov 2010 13:49:46 +0000 (13:49 +0000)
ChangeLog
config/policy.xml
magick/resource.c

index 47bc75f651cedeaabcbc7fd9004a7b5a8f39a669..a97b31fbfc5f90f42dc20b7e07e25953bfd0a192 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+2010-11-23  6.6.6-0 Cristy  <quetzlzacatenango@image...>
+  * The policy.xml sets not-to-exceed resource values (e.g. policy memory limit
+    1GB, -limit 2GB exceeds policy maximum so memory limit is 1GB).
+
 2010-11-21  6.6.5-10 Cristy  <quetzlzacatenango@image...>
   * Fix png coder compile error when HDRI is enabled.
 
index ac2a65a02c5b1a69f4c347a84026d4793506544a..a4d654011694438ec522726096d5cff782aee78d 100644 (file)
   Any large image is cached to disk rather than memory:
 
     <policy domain="resource" name="area" value="1gb"/>
+
+  Note, resource policies are maximums for each instance of ImageMagick. For
+  example, if you set the memory resource to 1gb, no ImageMagick instance can
+  use more than 10mb of pixel cache memory.
 -->
 <policymap>
   <!-- <policy domain="system" name="precision" value="6"/> -->
index 8e4b0384d742a62f429133704b8e20e7a8e87a75..88952bf70de74d3ae60614d352f00b5bd4040037 100644 (file)
@@ -873,8 +873,7 @@ MagickExport MagickBooleanType RelinquishUniqueFileResource(const char *path)
 %
 */
 
-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);
@@ -993,7 +992,6 @@ MagickExport MagickBooleanType ResourceComponentGenesis(void)
     limit=GetPolicyValue("thread");
   if (limit != (char *) NULL)
     {
-      SetOpenMPMaximumThreads((int) StringToUnsignedLong(limit));
       (void) SetMagickResourceLimit(ThreadResource,StringToSizeType(limit,
         100.0));
       limit=DestroyString(limit);
@@ -1065,9 +1063,20 @@ MagickExport void ResourceComponentTerminus(void)
 %    o limit: the maximum limit for the resource.
 %
 */
+
+static inline size_t MagickMin(const size_t x,const size_t 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);
@@ -1076,37 +1085,60 @@ MagickExport MagickBooleanType SetMagickResourceLimit(const ResourceType type,
     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=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: