From b20ac9f0dfb631c5ff1fd07660400b60e39f282d Mon Sep 17 00:00:00 2001 From: "Committo,Ergo:sum" <esj@rezo.net> Date: Mon, 15 Oct 2007 12:16:33 +0000 Subject: [PATCH] =?UTF-8?q?Joli=20bug:=20si=20c'est=20l'heure=20de=20renou?= =?UTF-8?q?veller=20l'alea=20mais=20que,=20pour=20une=20raison=20ou=20pour?= =?UTF-8?q?=20une=20autre,=20le=20cache=20des=20meta=20devient=20inaccessi?= =?UTF-8?q?ble=20en=20=C3=A9criture,=20le=20cache=20devient=20faux=20et=20?= =?UTF-8?q?le=20nombre=20de=20fichiers=20de=20sessions=20explose.=20On=20b?= =?UTF-8?q?linde.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ecrire/inc/flock.php | 6 +++--- ecrire/inc/meta.php | 15 ++++++++++----- 2 files changed, 13 insertions(+), 8 deletions(-) diff --git a/ecrire/inc/flock.php b/ecrire/inc/flock.php index 9e47388dce..9fecf5ccf2 100644 --- a/ecrire/inc/flock.php +++ b/ecrire/inc/flock.php @@ -184,19 +184,19 @@ function jeune_fichier($fichier, $n) // http://doc.spip.org/@supprimer_fichier function supprimer_fichier($fichier, $lock=true) { if (!@file_exists($fichier)) - return; + return true; if ($lock) { // verrouiller le fichier destination if (!$fp = spip_fopen_lock($fichier, 'a', LOCK_EX)) - return; + return false; // liberer le verrou spip_fclose_unlock($fp); } // supprimer - @unlink($fichier); + return @unlink($fichier); } // Supprimer brutalement, si le fichier existe // http://doc.spip.org/@spip_unlink diff --git a/ecrire/inc/meta.php b/ecrire/inc/meta.php index 11f908ba1d..7a5b15daf1 100644 --- a/ecrire/inc/meta.php +++ b/ecrire/inc/meta.php @@ -19,23 +19,28 @@ if (!defined("_ECRIRE_INC_VERSION")) return; function inc_meta_dist() { // Lire les meta, en cache si present, valide et lisible - if ($old = jeune_fichier(_FILE_META, 1<<24) + if ($new = jeune_fichier(_FILE_META, 1<<24) # AND (@filemtime(_FILE_META) > @filemtime(_DIR_RESTREINT . '.svn/entries')) AND lire_fichier(_FILE_META, $meta)) $GLOBALS['meta'] = @unserialize($meta); // sinon lire en base - if (!$GLOBALS['meta']) $old = !lire_metas(); + if (!$GLOBALS['meta']) $new = !lire_metas(); // renouveller l'alea au besoin if (test_espace_prive() AND $GLOBALS['meta'] - AND (time() > _RENOUVELLE_ALEA + @$GLOBALS['meta']['alea_ephemere_date'])) { + AND (time() >/* _RENOUVELLE_ALEA + */ @$GLOBALS['meta']['alea_ephemere_date'])) { + // si on n'a pas l'acces en ecriture sur le cache, + // ne pas renouveller l'alea sinon le cache devient faux + if (supprimer_fichier(_FILE_META)) { include_spip('inc/acces'); renouvelle_alea(); + $new = false; + } else spip_log("impossible d'ecrire dans " . _FILE_META); } - // et refaire le cache si on a pu lire + // et refaire le cache si on a du lire en base - if (!$old) ecrire_fichier(_FILE_META, serialize($GLOBALS['meta'])); + if (!$new) ecrire_fichier(_FILE_META, serialize($GLOBALS['meta'])); } // fonctions aussi appelees a l'install ==> spip_query en premiere requete -- GitLab