Details
-
Bug
-
Status: Closed
-
Critical
-
Resolution: Fixed
-
1.8.5
-
None
-
php > 5.1.2, Apache > 2, windows vista business edition, linux Ubuntu > 6, moodle 2007021541 (1.8.4+)
-
MOODLE_18_STABLE
-
MOODLE_18_STABLE, MOODLE_19_STABLE
Description
the cached data are referenced by their ids > $rcache>data[$table][$id], $rcache->data[$table] is an associative array.
but some php native functions used to manage array data return indexed arrays. This is the case of the array_shift function.
the new rcache_set function has corrupted some cached data of our moodle making the script to enter in an infinite loop in the lib/accesslib.php - get_parent_cats function.
the problem is coming from this lines :
function rcache_set($table, $id, $rec) {
global $CFG, $MCACHE, $rcache;
if ($CFG->cachetype === 'internal') {
if (!isset($rcache->data[$table]))
if (!isset($rcache->data[$table][$id]) and count($rcache->data[$table]) > $CFG->intcachemax)
{ array_shift($rcache->data[$table]); }$rcache->data[$table][$id] = clone($rec);
to resolve the problem we have to make our own array_shift function or replace the array_shift($rcache->data[$table]); line by something like :
$keys = array_keys($rcache->data[$table]);
$firstkey = $keys[0];
unset($rcache->data[$table][$firstkey]);
hope that's help
Attachments
Issue Links
- has been marked as being related by
-
MDL-13237 rcache limiting through intcachemax not implemented
-
- Closed
-