]> granicus.if.org Git - imagemagick/commitdiff
http://www.imagemagick.org/discourse-server/viewtopic.php?f=2&t=29083
authorCristy <urban-warrior@imagemagick.org>
Mon, 1 Feb 2016 17:00:54 +0000 (12:00 -0500)
committerCristy <urban-warrior@imagemagick.org>
Mon, 1 Feb 2016 17:01:41 +0000 (12:01 -0500)
MagickCore/cache-private.h
MagickCore/cache.c
MagickCore/resource.c

index fd2d4668e7c3c62e566e9cfc460e6f8acc1d28ca..4e9117ba26cec68582de6a6eac0fa1858d43e16a 100644 (file)
@@ -276,6 +276,7 @@ extern MagickPrivate void
   *GetPixelCachePixels(Image *,MagickSizeType *,ExceptionInfo *),
   GetPixelCacheTileSize(const Image *,size_t *,size_t *),
   GetPixelCacheMethods(CacheMethods *),
+  ResetPixelCacheEpoch(void),
   SetPixelCacheMethods(Cache,CacheMethods *);
 
 #if defined(__cplusplus) || defined(c_plusplus)
index 92d51f4cd7b978080df1ee719336f2e7370a61c0..fbbfde9031cb0fdeeb8086cf2b6e3d6d206d5c65 100644 (file)
@@ -150,6 +150,9 @@ static volatile MagickBooleanType
 
 static SemaphoreInfo
   *cache_semaphore = (SemaphoreInfo *) NULL;
+
+static time_t
+  cache_epoch = 0;
 \f
 /*
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -1501,28 +1504,25 @@ static Cache GetImagePixelCache(Image *image,const MagickBooleanType clone,
     status;
 
   static MagickSizeType
+    cache_timelimit = 0,
     cpu_throttle = MagickResourceInfinity,
-    cycles = 0,
-    time_limit = 0;
-
-  static time_t
-    cache_timestamp = 0;
+    cycles = 0;
 
   status=MagickTrue;
   if (cpu_throttle == MagickResourceInfinity)
     cpu_throttle=GetMagickResourceLimit(ThrottleResource);
   if ((cpu_throttle != 0) && ((cycles++ % 32) == 0))
     MagickDelay(cpu_throttle);
-  if (time_limit == 0)
+  if (cache_epoch == 0)
     {
       /*
         Set the expire time in seconds.
       */
-      time_limit=GetMagickResourceLimit(TimeResource);
-      cache_timestamp=time((time_t *) NULL);
+      cache_timelimit=GetMagickResourceLimit(TimeResource);
+      cache_epoch=time((time_t *) NULL);
     }
-  if ((time_limit != MagickResourceInfinity) &&
-      ((MagickSizeType) (time((time_t *) NULL)-cache_timestamp) >= time_limit))
+  if ((cache_timelimit != MagickResourceInfinity) &&
+      ((MagickSizeType) (time((time_t *) NULL)-cache_epoch) >= cache_timelimit))
      {
 #if defined(ECANCELED)
        errno=ECANCELED;
@@ -4394,6 +4394,29 @@ MagickPrivate Cache ReferencePixelCache(Cache cache)
 %                                                                             %
 %                                                                             %
 %                                                                             %
++   R e s e t P i x e l C a c h e E p o c h e                                 %
+%                                                                             %
+%                                                                             %
+%                                                                             %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+%  ResetPixelCacheEpoch() resets the pixel cache epoch.
+%
+%  The format of the ResetPixelCacheEpoch method is:
+%
+%      void ResetPixelCacheEpoch(void)
+%
+*/
+MagickPrivate void ResetPixelCacheEpoch(void)
+{
+  cache_epoch=0;
+}
+\f
+/*
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%                                                                             %
+%                                                                             %
+%                                                                             %
 +   S e t P i x e l C a c h e M e t h o d s                                   %
 %                                                                             %
 %                                                                             %
index ce2c2f65326115527d993ab45c40e51e94c1310e..d059b4da4bda77e0d90dc7814bb4cd82732cda15 100644 (file)
@@ -41,6 +41,7 @@
 */
 #include "MagickCore/studio.h"
 #include "MagickCore/cache.h"
+#include "MagickCore/cache-private.h"
 #include "MagickCore/configure.h"
 #include "MagickCore/exception.h"
 #include "MagickCore/exception-private.h"
@@ -1324,6 +1325,7 @@ MagickExport MagickBooleanType SetMagickResourceLimit(const ResourceType type,
       value=GetPolicyValue("time");
       if (value != (char *) NULL)
         resource_info.time_limit=MagickMin(limit,StringToSizeType(value,100.0));
+      ResetPixelCacheEpoch();
       break;
     }
     default: