From: cristy Date: Thu, 15 Nov 2012 19:32:56 +0000 (+0000) Subject: (no commit message) X-Git-Tag: 7.0.1-0~4710 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=da27653694dc6d25468f56af3d753d7138788853;p=imagemagick --- diff --git a/MagickCore/cache-private.h b/MagickCore/cache-private.h index bcfeaa714..2fc090edb 100644 --- a/MagickCore/cache-private.h +++ b/MagickCore/cache-private.h @@ -185,7 +185,7 @@ typedef struct _CacheInfo SemaphoreInfo *semaphore, - *file_semaphore; + *disk_semaphore; time_t timestamp; diff --git a/MagickCore/cache.c b/MagickCore/cache.c index 77dc010f4..ce4cb319b 100644 --- a/MagickCore/cache.c +++ b/MagickCore/cache.c @@ -213,7 +213,7 @@ MagickPrivate Cache AcquirePixelCache(const size_t number_threads) ThrowFatalException(ResourceLimitFatalError,"MemoryAllocationFailed"); cache_info->semaphore=AllocateSemaphoreInfo(); cache_info->reference_count=1; - cache_info->file_semaphore=AllocateSemaphoreInfo(); + cache_info->disk_semaphore=AllocateSemaphoreInfo(); cache_info->debug=IsEventLogging(); cache_info->signature=MagickSignature; return((Cache ) cache_info); @@ -443,14 +443,14 @@ static MagickBooleanType ClosePixelCacheOnDisk(CacheInfo *cache_info) status; status=(-1); - LockSemaphoreInfo(cache_info->file_semaphore); + LockSemaphoreInfo(cache_info->disk_semaphore); if (cache_info->file != -1) { status=close(cache_info->file); cache_info->file=(-1); RelinquishMagickResource(FileResource,1); } - UnlockSemaphoreInfo(cache_info->file_semaphore); + UnlockSemaphoreInfo(cache_info->disk_semaphore); return(status == -1 ? MagickFalse : MagickTrue); } @@ -479,10 +479,10 @@ static MagickBooleanType OpenPixelCacheOnDisk(CacheInfo *cache_info, /* Open pixel cache on disk. */ - LockSemaphoreInfo(cache_info->file_semaphore); + LockSemaphoreInfo(cache_info->disk_semaphore); if (cache_info->file != -1) { - UnlockSemaphoreInfo(cache_info->file_semaphore); + UnlockSemaphoreInfo(cache_info->disk_semaphore); return(MagickTrue); /* cache already open */ } if (*cache_info->cache_filename == '\0') @@ -515,13 +515,13 @@ static MagickBooleanType OpenPixelCacheOnDisk(CacheInfo *cache_info, } if (file == -1) { - UnlockSemaphoreInfo(cache_info->file_semaphore); + UnlockSemaphoreInfo(cache_info->disk_semaphore); return(MagickFalse); } (void) AcquireMagickResource(FileResource,1); cache_info->file=file; cache_info->mode=mode; - UnlockSemaphoreInfo(cache_info->file_semaphore); + UnlockSemaphoreInfo(cache_info->disk_semaphore); return(MagickTrue); } @@ -536,8 +536,12 @@ static inline MagickOffsetType ReadPixelCacheRegion( count; #if !defined(MAGICKCORE_HAVE_PREAD) + LockSemaphoreInfo(cache_info->disk_semaphore); if (lseek(cache_info->file,offset,SEEK_SET) < 0) - return((MagickOffsetType) -1); + { + UnlockSemaphoreInfo(cache_info->disk_semaphore); + return((MagickOffsetType) -1); + } #endif count=0; for (i=0; i < (MagickOffsetType) length; i+=count) @@ -556,6 +560,9 @@ static inline MagickOffsetType ReadPixelCacheRegion( break; } } +#if !defined(MAGICKCORE_HAVE_PREAD) + UnlockSemaphoreInfo(cache_info->disk_semaphore); +#endif return(i); } @@ -570,8 +577,12 @@ static inline MagickOffsetType WritePixelCacheRegion( count; #if !defined(MAGICKCORE_HAVE_PWRITE) + LockSemaphoreInfo(cache_info->disk_semaphore); if (lseek(cache_info->file,offset,SEEK_SET) < 0) - return((MagickOffsetType) -1); + { + UnlockSemaphoreInfo(cache_info->disk_semaphore); + return((MagickOffsetType) -1); + } #endif count=0; for (i=0; i < (MagickOffsetType) length; i+=count) @@ -590,6 +601,9 @@ static inline MagickOffsetType WritePixelCacheRegion( break; } } +#if !defined(MAGICKCORE_HAVE_PWRITE) + UnlockSemaphoreInfo(cache_info->disk_semaphore); +#endif return(i); } @@ -1278,8 +1292,8 @@ MagickPrivate Cache DestroyPixelCache(Cache cache) cache_info->number_threads); if (cache_info->random_info != (RandomInfo *) NULL) cache_info->random_info=DestroyRandomInfo(cache_info->random_info); - if (cache_info->file_semaphore != (SemaphoreInfo *) NULL) - DestroySemaphoreInfo(&cache_info->file_semaphore); + if (cache_info->disk_semaphore != (SemaphoreInfo *) NULL) + DestroySemaphoreInfo(&cache_info->disk_semaphore); if (cache_info->semaphore != (SemaphoreInfo *) NULL) DestroySemaphoreInfo(&cache_info->semaphore); cache_info->signature=(~MagickSignature); @@ -4399,12 +4413,10 @@ static MagickBooleanType ReadPixelCacheMetacontent(CacheInfo *cache_info, /* Read meta content from disk. */ - LockSemaphoreInfo(cache_info->file_semaphore); if (OpenPixelCacheOnDisk(cache_info,IOMode) == MagickFalse) { ThrowFileException(exception,FileOpenError,"UnableToOpenFile", cache_info->cache_filename); - UnlockSemaphoreInfo(cache_info->file_semaphore); return(MagickFalse); } if ((cache_info->columns == nexus_info->region.width) && @@ -4426,7 +4438,6 @@ static MagickBooleanType ReadPixelCacheMetacontent(CacheInfo *cache_info, } if (IsFileDescriptorLimitExceeded() != MagickFalse) (void) ClosePixelCacheOnDisk(cache_info); - UnlockSemaphoreInfo(cache_info->file_semaphore); if (y < (ssize_t) rows) { ThrowFileException(exception,CacheError,"UnableToReadPixelCache", @@ -4535,12 +4546,10 @@ static MagickBooleanType ReadPixelCachePixels(CacheInfo *cache_info, /* Read pixels from disk. */ - LockSemaphoreInfo(cache_info->file_semaphore); if (OpenPixelCacheOnDisk(cache_info,IOMode) == MagickFalse) { ThrowFileException(exception,FileOpenError,"UnableToOpenFile", cache_info->cache_filename); - UnlockSemaphoreInfo(cache_info->file_semaphore); return(MagickFalse); } if ((cache_info->columns == nexus_info->region.width) && @@ -4560,7 +4569,6 @@ static MagickBooleanType ReadPixelCachePixels(CacheInfo *cache_info, } if (IsFileDescriptorLimitExceeded() != MagickFalse) (void) ClosePixelCacheOnDisk(cache_info); - UnlockSemaphoreInfo(cache_info->file_semaphore); if (y < (ssize_t) rows) { ThrowFileException(exception,CacheError,"UnableToReadPixelCache", @@ -5292,12 +5300,10 @@ static MagickBooleanType WritePixelCacheMetacontent(CacheInfo *cache_info, /* Write associated pixels to disk. */ - LockSemaphoreInfo(cache_info->file_semaphore); if (OpenPixelCacheOnDisk(cache_info,IOMode) == MagickFalse) { ThrowFileException(exception,FileOpenError,"UnableToOpenFile", cache_info->cache_filename); - UnlockSemaphoreInfo(cache_info->file_semaphore); return(MagickFalse); } if ((cache_info->columns == nexus_info->region.width) && @@ -5319,7 +5325,6 @@ static MagickBooleanType WritePixelCacheMetacontent(CacheInfo *cache_info, } if (IsFileDescriptorLimitExceeded() != MagickFalse) (void) ClosePixelCacheOnDisk(cache_info); - UnlockSemaphoreInfo(cache_info->file_semaphore); if (y < (ssize_t) rows) { ThrowFileException(exception,CacheError,"UnableToWritePixelCache", @@ -5428,12 +5433,10 @@ static MagickBooleanType WritePixelCachePixels(CacheInfo *cache_info, /* Write pixels to disk. */ - LockSemaphoreInfo(cache_info->file_semaphore); if (OpenPixelCacheOnDisk(cache_info,IOMode) == MagickFalse) { ThrowFileException(exception,FileOpenError,"UnableToOpenFile", cache_info->cache_filename); - UnlockSemaphoreInfo(cache_info->file_semaphore); return(MagickFalse); } if ((cache_info->columns == nexus_info->region.width) && @@ -5454,7 +5457,6 @@ static MagickBooleanType WritePixelCachePixels(CacheInfo *cache_info, } if (IsFileDescriptorLimitExceeded() != MagickFalse) (void) ClosePixelCacheOnDisk(cache_info); - UnlockSemaphoreInfo(cache_info->file_semaphore); if (y < (ssize_t) rows) { ThrowFileException(exception,CacheError,"UnableToWritePixelCache", diff --git a/MagickCore/stream.c b/MagickCore/stream.c index 160682cf2..5e83f3d80 100644 --- a/MagickCore/stream.c +++ b/MagickCore/stream.c @@ -235,8 +235,8 @@ static void DestroyPixelStream(Image *image) if (cache_info->nexus_info != (NexusInfo **) NULL) cache_info->nexus_info=DestroyPixelCacheNexus(cache_info->nexus_info, cache_info->number_threads); - if (cache_info->file_semaphore != (SemaphoreInfo *) NULL) - DestroySemaphoreInfo(&cache_info->file_semaphore); + if (cache_info->disk_semaphore != (SemaphoreInfo *) NULL) + DestroySemaphoreInfo(&cache_info->disk_semaphore); if (cache_info->semaphore != (SemaphoreInfo *) NULL) DestroySemaphoreInfo(&cache_info->semaphore); cache_info=(CacheInfo *) RelinquishMagickMemory(cache_info);