From f8104877649d3dfd43cf369b04f60c1d446e55cd Mon Sep 17 00:00:00 2001 From: Sam Hemelryk Date: Wed, 27 Feb 2013 18:20:48 +1300 Subject: [PATCH] MDL-38165 cache: fixed up session event purging --- cache/classes/loaders.php | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/cache/classes/loaders.php b/cache/classes/loaders.php index 4835360e24d..62d6f67b859 100644 --- a/cache/classes/loaders.php +++ b/cache/classes/loaders.php @@ -1435,6 +1435,7 @@ class cache_session extends cache { $cache = cache::make('core', 'eventinvalidation'); $events = $cache->get_many($definition->get_invalidation_events()); $todelete = array(); + $purgeall = false; // Iterate the returned data for the events. foreach ($events as $event => $keys) { if ($keys === false) { @@ -1446,11 +1447,18 @@ class cache_session extends cache { // If the timestamp of the event is more than or equal to the last invalidation (happened between the last // invalidation and now)then we need to invaliate the key. if ($timestamp >= $lastinvalidation) { - $todelete[] = $key; + if ($key === 'purged') { + $purgeall = true; + break; + } else { + $todelete[] = $key; + } } } } - if (!empty($todelete)) { + if ($purgeall) { + $this->purge(); + } else if (!empty($todelete)) { $todelete = array_unique($todelete); $this->delete_many($todelete); }