summaryrefslogtreecommitdiff
path: root/includes/BagOStuff.php
diff options
context:
space:
mode:
Diffstat (limited to 'includes/BagOStuff.php')
-rw-r--r--includes/BagOStuff.php23
1 files changed, 19 insertions, 4 deletions
diff --git a/includes/BagOStuff.php b/includes/BagOStuff.php
index 1dc93a2f..c720807d 100644
--- a/includes/BagOStuff.php
+++ b/includes/BagOStuff.php
@@ -240,6 +240,13 @@ abstract class SqlBagOStuff extends BagOStuff {
}
if($row=$this->_fetchobject($res)) {
$this->_debug("get: retrieved data; exp time is " . $row->exptime);
+ if ( $row->exptime != $this->_maxdatetime() &&
+ wfTimestamp( TS_UNIX, $row->exptime ) < time() )
+ {
+ $this->_debug("get: key has expired, deleting");
+ $this->delete($key);
+ return false;
+ }
return $this->_unserialize($this->_blobdecode($row->value));
} else {
$this->_debug('get: no matching rows');
@@ -253,7 +260,7 @@ abstract class SqlBagOStuff extends BagOStuff {
if($exptime == 0) {
$exp = $this->_maxdatetime();
} else {
- if($exptime < 3600*24*30)
+ if($exptime < 3.16e8) # ~10 years
$exptime += time();
$exp = $this->_fromunixtime($exptime);
}
@@ -390,7 +397,8 @@ class MediaWikiBagOStuff extends SqlBagOStuff {
}
function _doinsert($t, $v) {
$dbw =& wfGetDB( DB_MASTER );
- return $dbw->insert($t, $v, 'MediaWikiBagOStuff::_doinsert');
+ return $dbw->insert($t, $v, 'MediaWikiBagOStuff::_doinsert',
+ array( 'IGNORE' ) );
}
function _fetchobject($result) {
$dbw =& wfGetDB( DB_MASTER );
@@ -406,7 +414,11 @@ class MediaWikiBagOStuff extends SqlBagOStuff {
}
function _maxdatetime() {
$dbw =& wfGetDB(DB_MASTER);
- return $dbw->timestamp('9999-12-31 12:59:59');
+ if ( time() > 0x7fffffff ) {
+ return $this->_fromunixtime( 1<<62 );
+ } else {
+ return $this->_fromunixtime( 0x7fffffff );
+ }
}
function _fromunixtime($ts) {
$dbw =& wfGetDB(DB_MASTER);
@@ -492,11 +504,14 @@ class TurckBagOStuff extends BagOStuff {
class APCBagOStuff extends BagOStuff {
function get($key) {
$val = apc_fetch($key);
+ if ( is_string( $val ) ) {
+ $val = unserialize( $val );
+ }
return $val;
}
function set($key, $value, $exptime=0) {
- apc_store($key, $value, $exptime);
+ apc_store($key, serialize($value), $exptime);
return true;
}