]> granicus.if.org Git - imagemagick/commitdiff
(no commit message)
authorcristy <urban-warrior@git.imagemagick.org>
Sun, 27 Jan 2013 16:47:26 +0000 (16:47 +0000)
committercristy <urban-warrior@git.imagemagick.org>
Sun, 27 Jan 2013 16:47:26 +0000 (16:47 +0000)
MagickCore/distribute-cache.c
MagickCore/resource.c
coders/fits.c

index 5b0dc1eecc8bc305a1c787baf8596dc1329846e6..5c375c5285b33fdfaa881a7415432a56e2cfd4f6 100644 (file)
@@ -85,6 +85,9 @@
 #define DPCPendingConnections  10
 #define DPCPort  6668
 #define DPCSessionKeyLength  8
+#ifndef MSG_NOSIGNAL
+#  define MSG_NOSIGNAL 0
+#endif
 \f
 /*
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
index 691be4db469ac8e04ee763b8f43a943dc39c2102..6f913e8d0cb8b390136e2da685b78ec16f0fe62d 100644 (file)
@@ -76,6 +76,7 @@ typedef struct _ResourceInfo
     disk,
     file,
     thread,
+    throttle,
     time;
 
   MagickSizeType
@@ -85,6 +86,7 @@ typedef struct _ResourceInfo
     disk_limit,
     file_limit,
     thread_limit,
+    throttle_limit,
     time_limit;
 } ResourceInfo;
 \f
@@ -242,6 +244,18 @@ MagickExport MagickBooleanType AcquireMagickResource(const ResourceType type,
         MagickFalse,resource_limit);
       break;
     }
+    case ThrottleResource:
+    {
+      limit=resource_info.throttle_limit;
+      status=(resource_info.throttle_limit == MagickResourceInfinity) ||
+        ((MagickSizeType) resource_info.throttle < limit) ?
+        MagickTrue : MagickFalse;
+      (void) FormatMagickSize((MagickSizeType) resource_info.throttle,
+        MagickFalse,resource_current);
+      (void) FormatMagickSize((MagickSizeType) resource_info.throttle_limit,
+        MagickFalse,resource_limit);
+      break;
+    }
     case TimeResource:
     {
       resource_info.time+=size;
@@ -557,6 +571,11 @@ MagickExport MagickSizeType GetMagickResource(const ResourceType type)
       resource=(MagickSizeType) resource_info.thread;
       break;
     }
+    case ThrottleResource:
+    {
+      resource=(MagickSizeType) resource_info.throttle;
+      break;
+    }
     case TimeResource:
     {
       resource=(MagickSizeType) resource_info.time;
@@ -632,6 +651,11 @@ MagickExport MagickSizeType GetMagickResourceLimit(const ResourceType type)
       resource=resource_info.thread_limit;
       break;
     }
+    case ThrottleResource:
+    {
+      resource=resource_info.throttle_limit;
+      break;
+    }
     case TimeResource:
     {
       resource=resource_info.time_limit;
@@ -694,15 +718,16 @@ MagickExport MagickBooleanType ListMagickResourceInfo(FILE *file,
   if (resource_info.time_limit != MagickResourceInfinity)
     (void) FormatLocaleString(time_limit,MaxTextExtent,"%.20g",(double)
       ((MagickOffsetType) resource_info.time_limit));
-  (void) FormatLocaleFile(file,"  File        Area      Memory          Map"
-    "         Disk    Thread         Time\n");
+  (void) FormatLocaleFile(file,"  File       Area     Memory        Map"
+    "       Disk   Thread  Throttle       Time\n");
   (void) FormatLocaleFile(file,
     "--------------------------------------------------------"
-    "-----------------------\n");
-  (void) FormatLocaleFile(file,"%6g  %10s  %10s   %10s   %10s    %6g  %11s\n",
+    "------------------------\n");
+  (void) FormatLocaleFile(file,"%6g %10s %10s %10s %10s %8g  %8g %10s\n",
     (double) ((MagickOffsetType) resource_info.file_limit),area_limit,
     memory_limit,map_limit,disk_limit,(double) ((MagickOffsetType)
-    resource_info.thread_limit),time_limit);
+    resource_info.thread_limit),(double) ((MagickOffsetType)
+    resource_info.throttle_limit),time_limit);
   (void) fflush(file);
   UnlockSemaphoreInfo(resource_semaphore);
   return(MagickTrue);
@@ -800,6 +825,14 @@ MagickExport void RelinquishMagickResource(const ResourceType type,
         MagickFalse,resource_limit);
       break;
     }
+    case ThrottleResource:
+    {
+      (void) FormatMagickSize((MagickSizeType) resource_info.throttle,
+        MagickFalse,resource_current);
+      (void) FormatMagickSize((MagickSizeType) resource_info.throttle_limit,
+        MagickFalse,resource_limit);
+      break;
+    }
     case TimeResource:
     {
       resource_info.time-=size;
@@ -936,14 +969,13 @@ MagickPrivate MagickBooleanType ResourceComponentGenesis(void)
   memory=PixelCacheThreshold;
 #endif
   (void) SetMagickResourceLimit(AreaResource,2*memory);
-  (void) SetMagickResourceLimit(MemoryResource,memory);
-  (void) SetMagickResourceLimit(MapResource,2*memory);
   limit=GetEnvironmentValue("MAGICK_AREA_LIMIT");
   if (limit != (char *) NULL)
     {
       (void) SetMagickResourceLimit(AreaResource,StringToSizeType(limit,100.0));
       limit=DestroyString(limit);
     }
+  (void) SetMagickResourceLimit(MemoryResource,memory);
   limit=GetEnvironmentValue("MAGICK_MEMORY_LIMIT");
   if (limit != (char *) NULL)
     {
@@ -951,12 +983,14 @@ MagickPrivate MagickBooleanType ResourceComponentGenesis(void)
         StringToSizeType(limit,100.0));
       limit=DestroyString(limit);
     }
+  (void) SetMagickResourceLimit(MapResource,2*memory);
   limit=GetEnvironmentValue("MAGICK_MAP_LIMIT");
   if (limit != (char *) NULL)
     {
       (void) SetMagickResourceLimit(MapResource,StringToSizeType(limit,100.0));
       limit=DestroyString(limit);
     }
+  (void) SetMagickResourceLimit(DiskResource,MagickResourceInfinity);
   limit=GetEnvironmentValue("MAGICK_DISK_LIMIT");
   if (limit != (char *) NULL)
     {
@@ -1000,6 +1034,15 @@ MagickPrivate MagickBooleanType ResourceComponentGenesis(void)
         100.0));
       limit=DestroyString(limit);
     }
+  (void) SetMagickResourceLimit(ThrottleResource,0);
+  limit=GetEnvironmentValue("MAGICK_THROTTLE_LIMIT");
+  if (limit != (char *) NULL)
+    {
+      (void) SetMagickResourceLimit(ThrottleResource,StringToSizeType(limit,
+        100.0));
+      limit=DestroyString(limit);
+    }
+  (void) SetMagickResourceLimit(TimeResource,MagickResourceInfinity);
   limit=GetEnvironmentValue("MAGICK_TIME_LIMIT");
   if (limit != (char *) NULL)
     {
@@ -1138,6 +1181,17 @@ MagickExport MagickBooleanType SetMagickResourceLimit(const ResourceType type,
         resource_info.thread_limit=GetOpenMPMaximumThreads();
       break;
     }
+    case ThrottleResource:
+    {
+      resource_info.throttle_limit=limit;
+      value=GetPolicyValue("throttle");
+      if (value != (char *) NULL)
+        resource_info.throttle_limit=MagickMin(limit,StringToSizeType(value,
+          100.0));
+      if (resource_info.throttle_limit > GetOpenMPMaximumThreads())
+        resource_info.throttle_limit=GetOpenMPMaximumThreads();
+      break;
+    }
     case TimeResource:
     {
       resource_info.time_limit=limit;
index c8a515103905fc415fe1dc809a4823a8d306d4a6..7e1de7abed7cbc7975350e7f45afa0456f3ace86 100644 (file)
@@ -437,6 +437,8 @@ static Image *ReadFITSImage(const ImageInfo *image_info,
     */
     scale=(double) QuantumRange/(fits_info.scale*(fits_info.max_data-
       fits_info.min_data)+fits_info.zero);
+    if ((image->depth == 16) || (image->depth == 32) || (image->depth == 64))
+      scale=1.0;
     for (y=(ssize_t) image->rows-1; y >= 0; y--)
     {
       q=QueueAuthenticPixels(image,0,y,image->columns,1,exception);