Fix missing index update after write() call

pull/247/merge
Aleksander Machniak 9 years ago
parent 46d316b9c5
commit 652e11f82e

@ -354,7 +354,14 @@ class rcube_cache
} }
if ($this->type == 'memcache' || $this->type == 'apc') { if ($this->type == 'memcache' || $this->type == 'apc') {
return $this->add_record($this->ckey($key), $data); $result = $this->add_record($this->ckey($key), $data);
// make sure index will be updated
if ($result && !array_key_exists($key, $this->cache_sums)) {
$this->cache_sums[$key] = true;
}
return $result;
} }
$key_exists = array_key_exists($key, $this->cache_sums); $key_exists = array_key_exists($key, $this->cache_sums);
@ -543,10 +550,15 @@ class rcube_cache
// Make sure index contains new keys // Make sure index contains new keys
foreach ($this->cache as $key => $value) { foreach ($this->cache as $key => $value) {
if ($value !== null) { if ($value !== null && !in_array($key, $this->index)) {
if (array_search($key, $this->index) === false) { $this->index[] = $key;
$this->index[] = $key; }
} }
// new keys added using self::write()
foreach ($this->cache_sums as $key => $value) {
if ($value === true && !in_array($key, $this->index)) {
$this->index[] = $key;
} }
} }

@ -348,7 +348,14 @@ class rcube_cache_shared
} }
if ($this->type == 'memcache' || $this->type == 'apc') { if ($this->type == 'memcache' || $this->type == 'apc') {
return $this->add_record($this->ckey($key), $data); $result = $this->add_record($this->ckey($key), $data);
// make sure index will be updated
if ($result && !array_key_exists($key, $this->cache_sums)) {
$this->cache_sums[$key] = true;
}
return $result;
} }
$key_exists = array_key_exists($key, $this->cache_sums); $key_exists = array_key_exists($key, $this->cache_sums);
@ -531,10 +538,15 @@ class rcube_cache_shared
// Make sure index contains new keys // Make sure index contains new keys
foreach ($this->cache as $key => $value) { foreach ($this->cache as $key => $value) {
if ($value !== null) { if ($value !== null && !in_array($key, $this->index)) {
if (array_search($key, $this->index) === false) { $this->index[] = $key;
$this->index[] = $key; }
} }
// new keys added using self::write()
foreach ($this->cache_sums as $key => $value) {
if ($value === true && !in_array($key, $this->index)) {
$this->index[] = $key;
} }
} }

Loading…
Cancel
Save