Index: cache/stores/file/lib.php IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8 =================================================================== --- cache/stores/file/lib.php (revision be7e9472901aad3ebf0b27335ca60d83105c3d80) +++ cache/stores/file/lib.php (revision ) @@ -341,7 +341,7 @@ $maxtime = cache::now() - $ttl; } $readfile = false; - if ($this->prescan && array_key_exists($key, $this->keys)) { + if ($this->prescan && array_key_exists($filename, $this->keys)) { if (!$ttl || $this->keys[$filename] >= $maxtime && file_exists($file)) { $readfile = true; } else { Index: cache/stores/file/tests/file_test.php IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8 =================================================================== --- cache/stores/file/tests/file_test.php (revision be7e9472901aad3ebf0b27335ca60d83105c3d80) +++ cache/stores/file/tests/file_test.php (revision ) @@ -44,4 +44,34 @@ protected function get_class_name() { return 'cachestore_file'; } + + /** + * Testing cachestore_file::get with prescan enabled and with + * deleting the cache between the prescan and the call to get. + * + * The deleting of cache simulates some other process purging + * the cache. + */ + public function test_cache_get_with_prescan_and_purge() { + global $CFG; + + $definition = cache_definition::load_adhoc(cache_store::MODE_REQUEST, 'cachestore_file', 'phpunit_test'); + $name = 'File test'; + + $path = make_cache_directory('cachestore_file_test'); + $cache = new cachestore_file($name, array('path' => $path, 'prescan' => true)); + $cache->initialise($definition); + + $cache->set('testing', 'value'); + + $path = make_cache_directory('cachestore_file_test'); + $cache = new cachestore_file($name, array('path' => $path, 'prescan' => true)); + $cache->initialise($definition); + + // Let's pretend that some other process purged caches. + remove_dir($CFG->cachedir.'/cachestore_file_test', true); + make_cache_directory('cachestore_file_test'); + + $cache->get('testing'); + } } \ No newline at end of file