From 88161eff479ba1f354963073e9c4dc7825ec2fe7 Mon Sep 17 00:00:00 2001 From: Tim Starling Date: Thu, 3 Mar 2011 15:24:51 +0000 Subject: [PATCH] * When CACHE_ANYTHING is requested, return the cached instance, don't construct a new object for each use. * In MemcachedSessions.php, register a shutdown function to shut down the session early, before $wgMemc is destroyed. I'm not sure why my recent changes caused this problem to show up now. * Use EmptyBagOStuff instead of FakeMemCachedClient in DefaultSettings.php for CACHE_NONE. --- includes/DefaultSettings.php | 2 +- includes/MemcachedSessions.php | 10 ++++++++++ includes/objectcache/ObjectCache.php | 4 ++-- 3 files changed, 13 insertions(+), 3 deletions(-) diff --git a/includes/DefaultSettings.php b/includes/DefaultSettings.php index 37c64cfb17..31f1f939dd 100644 --- a/includes/DefaultSettings.php +++ b/includes/DefaultSettings.php @@ -1519,7 +1519,7 @@ $wgParserCacheType = CACHE_ANYTHING; * The other parameters are dependent on the class used. */ $wgObjectCaches = array( - CACHE_NONE => array( 'class' => 'FakeMemCachedClient' ), + CACHE_NONE => array( 'class' => 'EmptyBagOStuff' ), CACHE_DB => array( 'class' => 'SqlBagOStuff', 'table' => 'objectcache' ), CACHE_DBA => array( 'class' => 'DBABagOStuff' ), diff --git a/includes/MemcachedSessions.php b/includes/MemcachedSessions.php index 4f10f99c66..3825a3ba3d 100644 --- a/includes/MemcachedSessions.php +++ b/includes/MemcachedSessions.php @@ -92,4 +92,14 @@ function memsess_gc( $maxlifetime ) { return true; } +function memsess_write_close() { + session_write_close(); +} + session_set_save_handler( 'memsess_open', 'memsess_close', 'memsess_read', 'memsess_write', 'memsess_destroy', 'memsess_gc' ); + +// It's necessary to register a shutdown function to call session_write_close(), +// because by the time the request shutdown function for the session module is +// called, $wgMemc has already been destroyed. Shutdown functions registered +// this way are called before object destruction. +register_shutdown_function( 'memsess_write_close' ); diff --git a/includes/objectcache/ObjectCache.php b/includes/objectcache/ObjectCache.php index 96dd4cf7b7..5155c0da9a 100644 --- a/includes/objectcache/ObjectCache.php +++ b/includes/objectcache/ObjectCache.php @@ -58,10 +58,10 @@ class ObjectCache { $candidates = array( $wgMainCacheType, $wgMessageCacheType, $wgParserCacheType ); foreach ( $candidates as $candidate ) { if ( $candidate !== CACHE_NONE && $candidate !== CACHE_ANYTHING ) { - return self::newFromId( $candidate ); + return self::getInstance( $candidate ); } } - return self::newFromId( CACHE_DB ); + return self::getInstance( CACHE_DB ); } /** -- 2.20.1