Details
-
Type:
Bug
-
Status:
Closed
-
Priority:
Critical
-
Resolution: Fixed
-
Affects Version/s: 1.8.5
-
Component/s: Libraries, Performance
-
Labels:None
-
Environment:php > 5.1.2, Apache > 2, windows vista business edition, linux Ubuntu > 6, moodle 2007021541 (1.8.4+)
-
Affected Branches:MOODLE_18_STABLE
-
Fixed Branches: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])) {
$rcache->data[$table] = array();
}
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
Issue Links
| This issue has been marked as being related by: | ||||
| MDL-13237 | rcache limiting through intcachemax not implemented |
|
|
|
eh, sorry - my fault, the 1.8.4+ and above are affected