]> granicus.if.org Git - imagemagick/commitdiff
(no commit message)
authorcristy <urban-warrior@git.imagemagick.org>
Fri, 21 Dec 2012 02:42:29 +0000 (02:42 +0000)
committercristy <urban-warrior@git.imagemagick.org>
Fri, 21 Dec 2012 02:42:29 +0000 (02:42 +0000)
MagickCore/blob.c
MagickCore/cache-private.h
MagickCore/cache.c
MagickCore/image.c

index b00e2b16d8dda29d34608118ba3160130431eea5..00f7204d2740c5db21baab68c2747c7296d1be4b 100644 (file)
@@ -560,10 +560,7 @@ MagickExport MagickBooleanType CloseBlob(Image *image)
     case FileStream:
     {
       if (image->blob->synchronize != MagickFalse)
-        {
-          status=fflush(image->blob->file_info.file);
-          status=fsync(fileno(image->blob->file_info.file));
-        }
+        status=fsync(fileno(image->blob->file_info.file));
       status=fclose(image->blob->file_info.file);
       break;
     }
@@ -3748,6 +3745,18 @@ MagickPrivate MagickBooleanType SetBlobExtent(Image *image,
         break;
       offset=SeekBlob(image,(MagickOffsetType) extent-1,SEEK_SET);
       count=fwrite((const unsigned char *) "",1,1,image->blob->file_info.file);
+#if defined(MAGICKCORE_HAVE_POSIX_FALLOCATE)
+      if (image->blob->synchronize != MagickFalse)
+        {
+          int
+            status;
+
+          status=posix_fallocate(fileno(image->blob->file_info.file),offset,
+            extent-offset);
+          if (status != 0)
+            return(MagickFalse);
+        }
+#endif
       offset=SeekBlob(image,offset,SEEK_SET);
       if (count != (MagickOffsetType) 1)
         return(MagickFalse);
@@ -3783,6 +3792,18 @@ MagickPrivate MagickBooleanType SetBlobExtent(Image *image,
           offset=SeekBlob(image,(MagickOffsetType) extent-1,SEEK_SET);
           count=fwrite((const unsigned char *) "",1,1,
             image->blob->file_info.file);
+#if defined(MAGICKCORE_HAVE_POSIX_FALLOCATE)
+          if (image->blob->synchronize != MagickFalse)
+            {
+              int
+                status;
+
+              status=posix_fallocate(fileno(image->blob->file_info.file),offset,
+                extent-offset);
+              if (status != 0)
+                return(MagickFalse);
+            }
+#endif
           offset=SeekBlob(image,offset,SEEK_SET);
           if (count != (MagickOffsetType) 1)
             return(MagickTrue);
index 26a38dc079eba43b58f05b7d883267cba7bb84e6..e5b6bf337a1d5635dad73f410a84e9de1a0fc57d 100644 (file)
@@ -175,6 +175,7 @@ typedef struct _CacheInfo
     *random_info;
 
   MagickBooleanType
+    synchronize,
     debug;
 
   MagickThreadType
index 7433d8c6cba352c1acaf19ef3a55ec9b73c1df58..b09e79948f259b29b1502a95dcade4003cafd816 100644 (file)
@@ -192,6 +192,9 @@ MagickPrivate Cache AcquirePixelCache(const size_t number_threads)
   CacheInfo
     *cache_info;
 
+  char
+    *synchronize;
+
   cache_info=(CacheInfo *) AcquireQuantumMemory(1,sizeof(*cache_info));
   if (cache_info == (CacheInfo *) NULL)
     ThrowFatalException(ResourceLimitFatalError,"MemoryAllocationFailed");
@@ -211,6 +214,12 @@ MagickPrivate Cache AcquirePixelCache(const size_t number_threads)
   cache_info->nexus_info=AcquirePixelCacheNexus(cache_info->number_threads);
   if (cache_info->nexus_info == (NexusInfo **) NULL)
     ThrowFatalException(ResourceLimitFatalError,"MemoryAllocationFailed");
+  synchronize=GetEnvironmentValue("MAGICK_SYNCHRONIZE");
+  if (synchronize != (const char *) NULL)
+    {
+      cache_info->synchronize=IsStringTrue(synchronize);
+      synchronize=DestroyString(synchronize);
+    }
   cache_info->semaphore=AllocateSemaphoreInfo();
   cache_info->reference_count=1;
   cache_info->file_semaphore=AllocateSemaphoreInfo();
@@ -3691,6 +3700,17 @@ static MagickBooleanType SetPixelCacheExtent(Image *image,MagickSizeType length)
     return(MagickTrue);
   extent=(MagickOffsetType) length-1;
   count=WritePixelCacheRegion(cache_info,extent,1,(const unsigned char *) "");
+#if defined(MAGICKCORE_HAVE_POSIX_FALLOCATE)
+  if (cache_info->synchronize != MagickFalse)
+    {
+      int
+        status;
+
+      status=posix_fallocate(cache_info->file,offset+1,extent-offset);
+      if (status != 0)
+        return(MagickFalse);
+    }
+#endif
   return(count != (MagickOffsetType) 1 ? MagickFalse : MagickTrue);
 }
 
index 5d5637539eaf3e129d7ecf6beb4dcb1209ec7124..bbe60add1c95f24ce9ca9f977ba79ded7d308340 100644 (file)
@@ -1202,6 +1202,9 @@ MagickExport MagickBooleanType GetImageAlphaChannel(const Image *image)
 */
 MagickExport void GetImageInfo(ImageInfo *image_info)
 {
+  char
+    *synchronize;
+
   ExceptionInfo
     *exception;
 
@@ -1217,8 +1220,12 @@ MagickExport void GetImageInfo(ImageInfo *image_info)
   image_info->quality=UndefinedCompressionQuality;
   image_info->antialias=MagickTrue;
   image_info->dither=MagickTrue;
-  image_info->synchronize=IsStringTrue(GetEnvironmentValue(
-         "MAGICK_SYNCHRONIZE"));
+  synchronize=GetEnvironmentValue("MAGICK_SYNCHRONIZE");
+  if (synchronize != (const char *) NULL)
+    {
+      image_info->synchronize=IsStringTrue(synchronize);
+      synchronize=DestroyString(synchronize);
+    }
   exception=AcquireExceptionInfo();
   (void) QueryColorCompliance(BackgroundColor,AllCompliance,
     &image_info->background_color,exception);