MDL-70137 cache: Write config to temp file and move into place
authorAndrew Nicols <andrew@nicols.co.uk>
Fri, 6 Nov 2020 07:07:57 +0000 (15:07 +0800)
committerVíctor Déniz <victor@moodle.com>
Fri, 6 Nov 2020 19:16:51 +0000 (19:16 +0000)
cache/locallib.php

index b8509ce..db20b05 100644 (file)
@@ -102,13 +102,15 @@ class cache_config_writer extends cache_config {
         $factory = cache_factory::instance();
         $locking = $factory->create_lock_instance($lockconf);
         if ($locking->lock('configwrite', 'config', true)) {
+            $tempcachefile = "{$cachefile}.tmp";
             // Its safe to use w mode here because we have already acquired the lock.
-            $handle = fopen($cachefile, 'w');
+            $handle = fopen($tempcachefile, 'w');
             fwrite($handle, $content);
             fflush($handle);
             fclose($handle);
             $locking->unlock('configwrite', 'config');
-            @chmod($cachefile, $CFG->filepermissions);
+            @chmod($tempcachefile, $CFG->filepermissions);
+            rename($tempcachefile, $cachefile);
             // Tell PHP to recompile the script.
             core_component::invalidate_opcode_php_cache($cachefile);
         } else {