Skip to content
Extraits de code Groupes Projets
Valider b20ac9f0 rédigé par esj's avatar esj
Parcourir les fichiers

Joli bug: si c'est l'heure de renouveller l'alea mais que, pour une raison ou...

Joli bug: si c'est l'heure de renouveller l'alea mais que, pour une raison ou pour une autre, le cache des meta devient inaccessible en écriture, le cache devient faux et le nombre de fichiers de sessions explose. On blinde.
parent b326337e
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
...@@ -184,19 +184,19 @@ function jeune_fichier($fichier, $n) ...@@ -184,19 +184,19 @@ function jeune_fichier($fichier, $n)
// http://doc.spip.org/@supprimer_fichier // http://doc.spip.org/@supprimer_fichier
function supprimer_fichier($fichier, $lock=true) { function supprimer_fichier($fichier, $lock=true) {
if (!@file_exists($fichier)) if (!@file_exists($fichier))
return; return true;
if ($lock) { if ($lock) {
// verrouiller le fichier destination // verrouiller le fichier destination
if (!$fp = spip_fopen_lock($fichier, 'a', LOCK_EX)) if (!$fp = spip_fopen_lock($fichier, 'a', LOCK_EX))
return; return false;
// liberer le verrou // liberer le verrou
spip_fclose_unlock($fp); spip_fclose_unlock($fp);
} }
// supprimer // supprimer
@unlink($fichier); return @unlink($fichier);
} }
// Supprimer brutalement, si le fichier existe // Supprimer brutalement, si le fichier existe
// http://doc.spip.org/@spip_unlink // http://doc.spip.org/@spip_unlink
......
...@@ -19,23 +19,28 @@ if (!defined("_ECRIRE_INC_VERSION")) return; ...@@ -19,23 +19,28 @@ if (!defined("_ECRIRE_INC_VERSION")) return;
function inc_meta_dist() function inc_meta_dist()
{ {
// Lire les meta, en cache si present, valide et lisible // 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 (@filemtime(_FILE_META) > @filemtime(_DIR_RESTREINT . '.svn/entries'))
AND lire_fichier(_FILE_META, $meta)) AND lire_fichier(_FILE_META, $meta))
$GLOBALS['meta'] = @unserialize($meta); $GLOBALS['meta'] = @unserialize($meta);
// sinon lire en base // sinon lire en base
if (!$GLOBALS['meta']) $old = !lire_metas(); if (!$GLOBALS['meta']) $new = !lire_metas();
// renouveller l'alea au besoin // renouveller l'alea au besoin
if (test_espace_prive() if (test_espace_prive()
AND $GLOBALS['meta'] 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'); include_spip('inc/acces');
renouvelle_alea(); 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 // fonctions aussi appelees a l'install ==> spip_query en premiere requete
......
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Terminez d'abord l'édition de ce message.
Veuillez vous inscrire ou vous pour commenter