the array_shift() call is not correct because it reorders the array - see
MDL-18768, by Colin Campbell:
I am running into issues with this fix. The array_shift function renumbers numeric indexes. Consequently, as soon as we reach MAX_MODINFO_CACHE_SIZE in get_fast_modinfo, array_shift converts the cache keys from the course ids originally used to index the cache to sequential integers starting with zero. This causes all sorts of bad things to happen.