GC dangling compose data on logout in IMP
authorMichael M Slusarz <slusarz@curecanti.org>
Fri, 1 Oct 2010 17:58:14 +0000 (11:58 -0600)
committerMichael M Slusarz <slusarz@curecanti.org>
Fri, 1 Oct 2010 22:41:10 +0000 (16:41 -0600)
imp/lib/Application.php
imp/lib/Injector/Factory/Compose.php

index c5a013a..dba02fa 100644 (file)
@@ -145,6 +145,19 @@ class IMP_Application extends Horde_Registry_Application
         }
     }
 
+    /**
+     * Tasks to perform at logout.
+     */
+    public function logout()
+    {
+        /* Clean up dangling IMP_Compose objects. */
+        if (!empty($_SESSION['imp']['cache']['compose'])) {
+            foreach (array_keys($_SESSION['imp']['cache']['compose']) as $key) {
+                $GLOBALS['injector']->getInstance('IMP_Compose')->getOb($key)->destroy('cancel');
+            }
+        }
+    }
+
     /* Horde permissions. */
 
     /**
index 571ddac..363a06b 100644 (file)
@@ -89,10 +89,13 @@ class IMP_Injector_Factory_Compose
             case 'changed':
                 $val->changed = '';
                 $obs->overwrite($key, $val, false);
+
+                $_SESSION['imp']['cache']['compose'][$key] = 1;
                 break;
 
             case 'deleted':
                 $obs->prune($key);
+                unset($_SESSION['imp']['cache']['compose'][$key]);
                 break;
             }
         }