From cbaf42593d04d34785dbf732786f89d7f13fdb27 Mon Sep 17 00:00:00 2001
From: Chris Smith <chris@jalakai.co.uk>
Date: Sat, 23 Feb 2008 03:55:39 +0100
Subject: [PATCH] Fix for FS#1334, see also FS#1090

FS#1090 ensured DW would never rebuild instructions in the same run by forcing subsequent
instruction requests to use the version cached on the first request.  That introduced problems
when the caching of the instructions failed (FS#1334).  This patch allows subsequent rebuilds
when cache storage failed.

darcs-hash:20080223025539-d26fc-26202a049a6969816553d950a2bb8f71a02ae76e.gz
---
 inc/cache.php       | 6 +++---
 inc/parserutils.php | 7 +++++--
 2 files changed, 8 insertions(+), 5 deletions(-)

diff --git a/inc/cache.php b/inc/cache.php
index 3c5dc058e..50ab799e7 100644
--- a/inc/cache.php
+++ b/inc/cache.php
@@ -105,10 +105,10 @@ class cache {
    * cache $data
    *
    * @param   string $data   the data to be cached
-   * @return  none
+   * @return  bool           true on success, false otherwise
    */
   function storeCache($data) {
-    io_savefile($this->cache, $data);
+    return io_savefile($this->cache, $data);
   }
 
   /**
@@ -286,6 +286,6 @@ class cache_instructions extends cache_parser {
   }
 
   function storeCache($instructions) {
-    io_savefile($this->cache,serialize($instructions));
+    return io_savefile($this->cache,serialize($instructions));
   }
 }
diff --git a/inc/parserutils.php b/inc/parserutils.php
index 66d1ae13c..c65185239 100644
--- a/inc/parserutils.php
+++ b/inc/parserutils.php
@@ -183,8 +183,11 @@ function p_cached_instructions($file,$cacheonly=false,$id='') {
   } else if (@file_exists($file)) {
     // no cache - do some work
     $ins = p_get_instructions(io_readfile($file));
-    $cache->storeCache($ins);
-    $run[$file] = true; // we won't rebuild these instructions in the same run again
+    if ($cache->storeCache($ins)) {
+      $run[$file] = true; // we won't rebuild these instructions in the same run again
+    } else {
+      msg('Unable to save cache file. Hint: disk full; file permissions; safe_mode setting.',-1);
+    }
     return $ins;
   }
 
-- 
GitLab