]> git.mxchange.org Git - quix0rs-gnu-social.git/commitdiff
Workaround for locally-handled sessions breaking on PHP 5.3 with APC enabled.
authorBrion Vibber <brion@pobox.com>
Fri, 10 Dec 2010 22:08:36 +0000 (22:08 +0000)
committerBrion Vibber <brion@pobox.com>
Fri, 10 Dec 2010 22:08:36 +0000 (22:08 +0000)
Big thanks to the folks at http://pecl.php.net/bugs/bug.php?id=16745 for the secret juju!
Classes were being torn down before session save handlers got called at the end of the request, which exploded with complaints about being unable to find various classes.
Registering a shutdown function lets us explicitly close out the session before everything gets torn down.

classes/Session.php

index 2422f8b68ecf975dd3794a051917f6fc495a7a02..e1c83ad4dc78564b7745d06d56cba9a087635981 100644 (file)
@@ -178,6 +178,18 @@ class Session extends Memcached_DataObject
         $result = session_set_save_handler('Session::open', 'Session::close', 'Session::read',
                                            'Session::write', 'Session::destroy', 'Session::gc');
         self::logdeb("save handlers result = $result");
+
+        // PHP 5.3 with APC ends up destroying a bunch of object stuff before the session
+        // save handlers get called on request teardown.
+        // Registering an explicit shutdown function should take care of this before
+        // everything breaks on us.
+        register_shutdown_function('Session::cleanup');
+        
         return $result;
     }
+
+    static function cleanup()
+    {
+        session_write_close();
+    }
 }