On peut simplifier énormément l'utilisation de flock() ; en fait il faut
utiliser cette fonction sans tester son résultat, et ça marche très bien !
Je m'étais complètement fait obnubiler par la formule
while(!flock()) {...}
et du coup je pensais qu'il fallit que flock() renvoie true, d'où les tests
des répertoires etc. En vérité, soit flock() marche et nous endort pour nous
réveiller au moment où on a le droit de jouer (lire, écrire), soit il ne
marche pas et nous laisse jouer à nos risques et périls.
Périls minimes, puisque la fonction test_flock() était bugguée depuis le
début, et que personne ne s'est plaint
Bref, le seul test qui vaille, et qui pouvait encore justifier une fonction
spip_flock(), c'est l'existence de la fonction flock() elle-même. Or elle
existe depuis php 3.0.7...
Par ailleurs les constantes LOCK_EX etc sont dispos depuis php 4.0.1, je
pense qu'on demande déjà ce niveau-là.
On peut simplifier énormément l'utilisation de flock() ; en fait il faut
utiliser cette fonction sans tester son résultat, et ça marche très bien !
Oui, j'étais aussi arrivé à cette idée, sans avoir eu le temps de l'expérimenter.
Je m'étais complètement fait obnubiler par la formule
while(!flock()) {...}
et du coup je pensais qu'il fallit que flock() renvoie true, d'où les tests
des répertoires etc. En vérité, soit flock() marche et nous endort pour nous
réveiller au moment où on a le droit de jouer (lire, écrire), soit il ne
marche pas et nous laisse jouer à nos risques et périls.
Périls minimes, puisque la fonction test_flock() était bugguée depuis le
début, et que personne ne s'est plaint
Un exemple ne vaut pas démonstration: le gestionnaire de cache actuel n'utilise
pas beaucoup le verrouillage, il faudra tester en forçant des situations de concurrences
pour voir (mettre des sleep avant chaque inclure et demander la meme page dans 2 navigateurs).
Bref, le seul test qui vaille, et qui pouvait encore justifier une fonction
spip_flock(), c'est l'existence de la fonction flock() elle-même. Or elle
existe depuis php 3.0.7...
Par ailleurs les constantes LOCK_EX etc sont dispos depuis php 4.0.1, je
pense qu'on demande déjà ce niveau-là.
Ca c'est une bonne nouvelle (euh, ce n'est peut-etre pas le mot adéquat...)
Bref, le seul test qui vaille, et qui pouvait encore justifier une
fonction
spip_flock(), c'est l'existence de la fonction flock() elle-même. Or
elle
existe depuis php 3.0.7...
Par ailleurs les constantes LOCK_EX etc sont dispos depuis php 4.0.1,
je
pense qu'on demande déjà ce niveau-là.
Heu, attention, certains hebergeurs désactivent la fonction (c'est le cas
chez Free).
Le mieux, comme le disait Emmanuel, c'est de provoquer le conflit et de voir
comment ca réagit .... Je suis volontaire pour casser mon site sur Free
quand vous voulez.