fixed the creation of the cache directory in case of a race condition (closes #620)
authorFabien Potencier <fabien.potencier@gmail.com>
Sat, 4 Feb 2012 08:38:23 +0000 (09:38 +0100)
committerFabien Potencier <fabien.potencier@gmail.com>
Sat, 4 Feb 2012 08:40:09 +0000 (09:40 +0100)
CHANGELOG
lib/Twig/Environment.php

index 1eeaac0..9a7b8d2 100644 (file)
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,6 +1,6 @@
 * 1.7.0-DEV
 
- * n/a
+ * fixed the creation of the cache directory in case of a race condition
 
 * 1.6.0 (2012-02-04)
 
index 6a84e83..165430b 100644 (file)
@@ -1036,8 +1036,13 @@ class Twig_Environment
 
     protected function writeCacheFile($file, $content)
     {
-        if (!is_dir(dirname($file))) {
-            mkdir(dirname($file), 0777, true);
+        $dir = dirname($file);
+        if (!is_dir($dir)) {
+            if (false === @mkdir($dir, 0777, true) && !is_dir($dir)) {
+                throw new RuntimeException(sprintf("Unable to create the cache directory (%s).", $dir));
+            }
+        } elseif (!is_writable($dir)) {
+            throw new RuntimeException(sprintf("Unable to write in the cache directory (%s).", $dir));
         }
 
         $tmpFile = tempnam(dirname($file), basename($file));