diff --git a/cache/stores/file/lib.php b/cache/stores/file/lib.php index 2a106522c9a..7ef6531b0f1 100644 --- a/cache/stores/file/lib.php +++ b/cache/stores/file/lib.php @@ -266,7 +266,7 @@ class cachestore_file extends cache_store implements cache_is_key_aware, cache_i $this->definition = $definition; $hash = preg_replace('#[^a-zA-Z0-9]+#', '_', $this->definition->get_id()); $this->path = $this->filestorepath.'/'.$hash; - make_writable_directory($this->path); + make_writable_directory($this->path, false); if ($this->prescan && $definition->get_mode() !== self::MODE_REQUEST) { $this->prescan = false; } @@ -320,7 +320,7 @@ class cachestore_file extends cache_store implements cache_is_key_aware, cache_i $dir = $this->path . '/' . $subdir; if ($create) { // Create the directory. This function does it recursivily! - make_writable_directory($dir); + make_writable_directory($dir, false); } return $dir . '/' . $key . '.cache'; } diff --git a/lib/setuplib.php b/lib/setuplib.php index 7495c246032..b48aba25c0e 100644 --- a/lib/setuplib.php +++ b/lib/setuplib.php @@ -1236,10 +1236,15 @@ function make_writable_directory($dir, $exceptiononerror = true) { if (!file_exists($dir)) { if (!mkdir($dir, $CFG->directorypermissions, true)) { - if ($exceptiononerror) { - throw new invalid_dataroot_permissions($dir.' can not be created, check permissions.'); - } else { - return false; + clearstatcache(); + // There might be a race condition when creating directory. + if (!is_dir($dir)) { + if ($exceptiononerror) { + throw new invalid_dataroot_permissions($dir.' can not be created, check permissions.'); + } else { + debugging('Can not create directory: '.$dir, DEBUG_DEVELOPER); + return false; + } } } }