From fec2d8e1309d1f16f9cd772b82b28627d9359354 Mon Sep 17 00:00:00 2001
From: thomascube <thomas@roundcube.net>
Date: Tue, 21 Feb 2012 16:43:39 -0500
Subject: [PATCH] Refactored IMAP cache expunge: delegate to storage object; don't rely on deprecated 'enable_caching' config option

---
 program/include/rcmail.php |   21 ++++++++++++++++++---
 1 files changed, 18 insertions(+), 3 deletions(-)

diff --git a/program/include/rcmail.php b/program/include/rcmail.php
index 3d5915e..9d1190a 100644
--- a/program/include/rcmail.php
+++ b/program/include/rcmail.php
@@ -129,6 +129,7 @@
   private $caches = array();
   private $action_map = array();
   private $shutdown_functions = array();
+  private $expunge_cache = false;
 
 
   /**
@@ -767,8 +768,7 @@
     $this->session = new rcube_session($this->get_dbh(), $this->config);
 
     $this->session->register_gc_handler('rcmail_temp_gc');
-    if ($this->config->get('enable_caching'))
-      $this->session->register_gc_handler('rcmail_cache_gc');
+    $this->session->register_gc_handler(array($this, 'cache_gc'));
 
     // start PHP session (if not in CLI mode)
     if ($_SERVER['REMOTE_ADDR'])
@@ -1278,8 +1278,11 @@
             $cache->close();
     }
 
-    if (is_object($this->storage))
+    if (is_object($this->storage)) {
+        if ($this->expunge_cache)
+            $this->storage->expunge_cache();
       $this->storage->close();
+  }
 
     // before closing the database connection, write session data
     if ($_SERVER['REMOTE_ADDR'] && is_object($this->session)) {
@@ -1316,6 +1319,18 @@
 
 
   /**
+   * Garbage collector for cache entries.
+   * Set flag to expunge caches on shutdown
+   */
+  function cache_gc()
+  {
+    // because this gc function is called before storage is initialized,
+    // we just set a flag to expunge storage cache on shutdown.
+    $this->expunge_cache = true;
+  }
+
+
+  /**
    * Generate a unique token to be used in a form request
    *
    * @return string The request token

--
Gitblit v1.9.1