CVS: spip inc-cache.php3,1.29,1.30

Update of /home/spip-cvs/spip
In directory miel:/tmp/cvs-serv405

Modified Files:
  inc-cache.php3
Log Message:
cache vaguement plus robuste (?)

Index: inc-cache.php3

RCS file: /home/spip-cvs/spip/inc-cache.php3,v
retrieving revision 1.29
retrieving revision 1.30
diff -u -d -r1.29 -r1.30
--- inc-cache.php3 28 Sep 2003 18:07:30 -0000 1.29
+++ inc-cache.php3 28 Sep 2003 19:38:33 -0000 1.30
@@ -88,25 +88,37 @@
   global $flag_flock;

   $fichier_tmp = $fichier.'_tmp';
+ $fichier_new = $fichier.'.NEW';
+
+ // Essayer de poser un verrou pour proteger l'ecriture du fichier
+ if (!spip_get_lock($fichier_tmp, 1)) return $fichier_new;
+ $ok = true;
   $f = fopen($fichier_tmp, "wb");
- if (!$f) return;
+ if (!$f) $ok = false;
+ else {
+ $r = fwrite($f, $contenu);
+ if ($r != strlen($contenu)) $ok = false;
+ if (!fclose($f)) $ok = false;
+ }

- // Essayer de poser un verrou
- if ($flag_flock) {
- @flock($f, 6, $r);
- if ($r) return;
+ // En cas d'erreur d'ecriture, renvoyer le fichier existant
+ if (!$ok) {
+ spip_release_lock($fichier_tmp);
+ clearstatcache();
+ return file_exists($fichier_new) ? $fichier_new : $fichier;
   }
- $r = fwrite($f, $contenu);
- if ($flag_flock) @flock($f, 3);
- if ($r != strlen($contenu)) return;
- if (!fclose($f)) return;

+ // Finaliser
+ @unlink($fichier_new);
+ rename($fichier_tmp, $fichier_new);
   @unlink($fichier);
- $fichier = $fichier.'.NEW';
- @unlink($fichier);
- rename($fichier_tmp, $fichier);
- if ($GLOBALS['flag_apc']) apc_rm($fichier);
- return $fichier;
+ spip_release_lock($fichier_tmp);
+
+ if ($GLOBALS['flag_apc']) {
+ apc_rm($fichier_new);
+ apc_rm($fichier);
+ }
+ return $fichier_new;
}

@@ -151,7 +163,8 @@
     if ($regexp AND !ereg($regexp, $fichier)) continue;
     $chemin = "$dir/$fichier";
     if (is_file($chemin)) {
- if (($t - filemtime($chemin)) > $age OR ereg('\.NEW$', $fichier)) {
+ $d = $t - filemtime($chemin);
+ if ($d > $age OR (ereg('\.NEW$', $fichier) AND $d > 60)) {
         @unlink($chemin);
         $fichier = ereg_replace('\.NEW$', '', $fichier);
         $query = "DELETE FROM spip_forum_cache WHERE fichier='$fichier'";