From: cristy Date: Sun, 27 Jan 2013 16:47:26 +0000 (+0000) Subject: (no commit message) X-Git-Tag: 7.0.1-0~4333 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=7fc1b85bfd9531faa599d07544621651390c9541;p=imagemagick --- diff --git a/MagickCore/distribute-cache.c b/MagickCore/distribute-cache.c index 5b0dc1eec..5c375c528 100644 --- a/MagickCore/distribute-cache.c +++ b/MagickCore/distribute-cache.c @@ -85,6 +85,9 @@ #define DPCPendingConnections 10 #define DPCPort 6668 #define DPCSessionKeyLength 8 +#ifndef MSG_NOSIGNAL +# define MSG_NOSIGNAL 0 +#endif /* %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/MagickCore/resource.c b/MagickCore/resource.c index 691be4db4..6f913e8d0 100644 --- a/MagickCore/resource.c +++ b/MagickCore/resource.c @@ -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; @@ -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; diff --git a/coders/fits.c b/coders/fits.c index c8a515103..7e1de7abe 100644 --- a/coders/fits.c +++ b/coders/fits.c @@ -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);