problèmes de collision lors d'opérations d'écriture dans un fichier
#1
Je rencontre un problème récurrent avec le script Motus depuis le passage de la v1.6.19 à la v1.6.20 d'eggdrop.
En moyenne 2 à 3 fois par semaine, j'ai ce genre de message d'erreur (qui se produit aussi sur d'autres autres fichiers dans lesquels le jeu tente d'écrire en cours de partie) :
tcl
couldn't open "scripts/motus/scores/motus.scores": file busy 
    while executing 
"open $motus::scores_file w" 
    (procedure "motus::ecrit_scores" line 3) 
    invoked from within 
"motus::ecrit_scores" 
    (procedure "motus::score_update" line 17) 
    invoked from within 
"motus::score_update $nick $host $ptsproposition" 
    (procedure "motus::check_response" line 126) 
    invoked from within 
"motus::check_response $_pubm1 $_pubm2 $_pubm3 $_pubm4 $_pubm5"


ou encore
tcl
error copying "scripts/motus/html/templates/default/index.html" to "scripts/motus/html/export/index.html": file busy 
    while executing 
"file copy -force -- $currentfile $dest" 
    (procedure "motus::html_export" line 115) 
    invoked from within 
"motus::html_export "auto""


Il faut savoir que le fichier index.html cité dans la 2ème erreur n'est pas souvent écrit, et jamais lu par le script.

J'ai tenté d'utiliser
tcl
fileevent $channelID writable ::motus::nomdelaproc


sans plus de résultat. Pour utiliser fileevent, il faut que le canal soit resté ouvert (donc que $channelID existe), mais des tests m'ont prouvé qu'au moment où cette erreur se produit, le canal n'est pas ouvert.

L'utilisation de file writeable n'a rien donné non plus.

Merci d'avance pour vos idées.
Répondre Avertir
#2
Je crois que ce souci n'est pas nouveau avec tcl, indépendamment d'une utilisation avec eggdrop, du C ou autre. Je vais tenter de voir si des solutions ont été trouvées.
Répondre
#3
salut,

soit le fichier est déjà ouvert (sous un autre channel ID), soit le disque dur est surchargé (mise a jour, crontab gourmand etc...)

edite: un "putlog [file channels]" dans ta proc pourais t indiquer si le fichier est déjà ouvert
C'est en reconnaissant ses erreurs que l'on progresse Wink
Répondre Avertir
#4
@djkenny : comme je le disais plus haut, je me suis assuré que le fichier n'était pas déjà ouvert, et un disque dur occupé n'a jamais refusé l'autorisation d'accéder à un fichier.
Répondre Avertir
#5
dans certains cas le système peut reporter la requête en renvoyant un message à l application, celui ci est peut être interprété comme un refus par tcl
C'est en reconnaissant ses erreurs que l'on progresse Wink
Répondre Avertir


Atteindre :


Utilisateur(s) parcourant ce sujet : 1 visiteur(s)
Tchat 100% gratuit -Discutez en toute liberté