Dafyd a écritDésolé j’ai pas beaucoup de temps libre en ce moment :/
Ben pas de souci, c'est surtout pour toi que ce n'est pas chouette.
grim7reaper a écritAlors oui dans l’absolu c’est possible partout.
Après en Python je ne pense pas (sauf bug de l’interpréteur), car il fait beaucoup de chose sur le tas.
un StackOverflow c’est un crash violent comme une segfault quoi.
Autant j’ai déjà vu des MemoryError ou des RecursionError en Python (voire des segfault quand j’appelle du C depuis Python), autant une stack overflow pas encore (d’où ma surprise).
Je m'étais dis que j'allais te filer, à toute fin utile, la trace récupérée dans le terminal pour que tu puisses te faire une idée, sauf que, bien évidemment, je n'en ai gardé aucune des plantages précédents, et ça fait quelques heures que ce message est rédigé par ailleurs et attend d'être envoyé sans qu'il n'y en ait l'ombre d'une qui se produise ^^ Donc bon, j'arrête d'attendre et je te montrerai ça à l'occasion dans un autre post.
Edit : ah, bah, j'ai fini par l'avoir ^^
Donc, si ça t'intéresse :
Fatal Python error: Cannot recover from stack overflow.
Thread 0x00007efe8503c700 (most recent call first):
File "/opt/touhy/lib/elzlibs/shared.py", line 125 in wait
File "/usr/lib/python3.7/threading.py", line 870 in run
File "/usr/lib/python3.7/threading.py", line 926 in _bootstrap_inner
File "/usr/lib/python3.7/threading.py", line 890 in _bootstrap
Thread 0x00007efe8583d700 (most recent call first):
File "/opt/touhy/lib/elzlibs/shared.py", line 125 in wait
File "/usr/lib/python3.7/threading.py", line 870 in run
File "/usr/lib/python3.7/threading.py", line 926 in _bootstrap_inner
File "/usr/lib/python3.7/threading.py", line 890 in _bootstrap
Thread 0x00007efe87fff700 (most recent call first):
File "/opt/touhy/lib/elzlibs/shared.py", line 125 in wait
File "/usr/lib/python3.7/threading.py", line 870 in run
File "/usr/lib/python3.7/threading.py", line 926 in _bootstrap_inner
File "/usr/lib/python3.7/threading.py", line 890 in _bootstrap
Thread 0x00007efea4f5a700 (most recent call first):
File "/opt/touhy/lib/elzlibs/calls.py", line 184 in wait
File "/usr/lib/python3.7/threading.py", line 870 in run
File "/usr/lib/python3.7/threading.py", line 926 in _bootstrap_inner
File "/usr/lib/python3.7/threading.py", line 890 in _bootstrap
Thread 0x00007efea575b700 (most recent call first):
File "/opt/touhy/lib/elzlibs/shared.py", line 103 in wait
File "/usr/lib/python3.7/threading.py", line 870 in run
File "/usr/lib/python3.7/threading.py", line 926 in _bootstrap_inner
File "/usr/lib/python3.7/threading.py", line 890 in _bootstrap
Thread 0x00007efea5f5c700 (most recent call first):
File "/usr/lib/python3.7/socket.py", line 212 in accept
File "/opt/touhy/lib/elzlibs/shared.py", line 89 in wait
File "/usr/lib/python3.7/threading.py", line 870 in run
File "/usr/lib/python3.7/threading.py", line 926 in _bootstrap_inner
File "/usr/lib/python3.7/threading.py", line 890 in _bootstrap
Thread 0x00007efea675d700 (most recent call first):
File "/opt/touhy/lib/sencol/joypads/sfml.py", line 61 in mainloop
File "/usr/lib/python3.7/threading.py", line 870 in run
File "/usr/lib/python3.7/threading.py", line 926 in _bootstrap_inner
File "/usr/lib/python3.7/threading.py", line 890 in _bootstrap
Thread 0x00007efea6f5e700 (most recent call first):
File "/usr/lib/python3.7/socket.py", line 212 in accept
File "/opt/touhy/lib/elzlibs/shared.py", line 89 in wait
File "/usr/lib/python3.7/threading.py", line 870 in run
File "/usr/lib/python3.7/threading.py", line 926 in _bootstrap_inner
File "/usr/lib/python3.7/threading.py", line 890 in _bootstrap
Current thread 0x00007efec2ffd700 (most recent call first):
File "/opt/touhy/lib/elzlibs/utils.py", line 131 in keys
File "/opt/touhy/lib/elzlibs/types/__init__.py", line 25 in __getitem__
File "/opt/touhy/lib/elzlibs/types/__init__.py", line 22 in __getitem__
File "/opt/touhy/lib/elzlibs/types/__init__.py", line 18 in __call__
File "/opt/touhy/lib/elzlibs/types/iter.py", line 12 in check
File "/opt/touhy/lib/elzlibs/types/iter.py", line 39 in parse
File "/opt/touhy/lib/elzlibs/types/__init__.py", line 110 in parse
File "/opt/touhy/lib/elzlibs/types/__init__.py", line 18 in __call__
File "/opt/touhy/lib/elzlibs/images/gears.py", line 105 in reframe
File "/opt/touhy/lib/elzlibs/images/plans.py", line 80 in perform
File "/opt/touhy/lib/elzlibs/images/plans.py", line 83 in perform
File "/opt/touhy/lib/elzlibs/images/plans.py", line 103 in perform
File "/opt/touhy/lib/elzlibs/images/plans.py", line 103 in perform
File "/opt/touhy/lib/elzlibs/images/plans.py", line 119 in perform
File "/opt/touhy/lib/elzlibs/images/plans.py", line 103 in perform
File "/opt/touhy/lib/elzlibs/images/plans.py", line 103 in perform
File "/opt/touhy/lib/elzlibs/images/__init__.py", line 20 in icon
File "/opt/touhy/lib/sencol/clips/__init__.py", line 21 in update
File "/opt/touhy/lib/elzlibs/calls.py", line 126 in threaded
File "/opt/touhy/lib/elzlibs/calls.py", line 199 in safely
File "/opt/touhy/lib/elzlibs/calls.py", line 29 in __call__
File "/opt/touhy/lib/elzlibs/calls.py", line 70 in warn
File "/opt/touhy/lib/elzlibs/entities/clip.py", line 32 in updates
File "/opt/touhy/lib/_elzlibs_gtk3/entities/clip.py", line 32 in change
File "/opt/touhy/lib/_elzlibs_gtk3/entities/clip.py", line 41 in read
File "/opt/touhy/lib/elzlibs/calls.py", line 126 in threaded
File "/opt/touhy/lib/elzlibs/entities/clip.py", line 114 in read
File "/opt/touhy/lib/elzlibs/entities/clip.py", line 100 in replacement
File "/opt/touhy/lib/elzlibs/images/plans.py", line 235 in text
File "/opt/touhy/lib/elzlibs/images/gears.py", line 220 in clip
File "/opt/touhy/lib/elzlibs/images/plans.py", line 80 in perform
File "/opt/touhy/lib/elzlibs/images/plans.py", line 103 in perform
File "/opt/touhy/lib/elzlibs/images/plans.py", line 103 in perform
File "/opt/touhy/lib/elzlibs/images/plans.py", line 103 in perform
File "/opt/touhy/lib/elzlibs/images/plans.py", line 121 in perform
File "/opt/touhy/lib/elzlibs/images/plans.py", line 103 in perform
File "/opt/touhy/lib/elzlibs/images/plans.py", line 103 in perform
File "/opt/touhy/lib/elzlibs/images/__init__.py", line 20 in icon
File "/opt/touhy/lib/sencol/clips/__init__.py", line 21 in update
File "/opt/touhy/lib/elzlibs/calls.py", line 126 in threaded
File "/opt/touhy/lib/elzlibs/calls.py", line 199 in safely
File "/opt/touhy/lib/elzlibs/calls.py", line 29 in __call__
File "/opt/touhy/lib/elzlibs/calls.py", line 70 in warn
File "/opt/touhy/lib/elzlibs/entities/clip.py", line 32 in updates
File "/opt/touhy/lib/_elzlibs_gtk3/entities/clip.py", line 32 in change
File "/opt/touhy/lib/_elzlibs_gtk3/entities/clip.py", line 41 in read
File "/opt/touhy/lib/elzlibs/calls.py", line 126 in threaded
File "/opt/touhy/lib/elzlibs/entities/clip.py", line 114 in read
File "/opt/touhy/lib/elzlibs/entities/clip.py", line 100 in replacement
File "/opt/touhy/lib/elzlibs/images/plans.py", line 235 in text
File "/opt/touhy/lib/elzlibs/images/gears.py", line 220 in clip
File "/opt/touhy/lib/elzlibs/images/plans.py", line 80 in perform
File "/opt/touhy/lib/elzlibs/images/plans.py", line 103 in perform
File "/opt/touhy/lib/elzlibs/images/plans.py", line 103 in perform
File "/opt/touhy/lib/elzlibs/images/plans.py", line 103 in perform
File "/opt/touhy/lib/elzlibs/images/plans.py", line 121 in perform
File "/opt/touhy/lib/elzlibs/images/plans.py", line 103 in perform
File "/opt/touhy/lib/elzlibs/images/plans.py", line 103 in perform
File "/opt/touhy/lib/elzlibs/images/__init__.py", line 20 in icon
File "/opt/touhy/lib/sencol/clips/__init__.py", line 21 in update
File "/opt/touhy/lib/elzlibs/calls.py", line 126 in threaded
File "/opt/touhy/lib/elzlibs/calls.py", line 199 in safely
File "/opt/touhy/lib/elzlibs/calls.py", line 29 in __call__
File "/opt/touhy/lib/elzlibs/calls.py", line 70 in warn
File "/opt/touhy/lib/elzlibs/entities/clip.py", line 32 in updates
File "/opt/touhy/lib/_elzlibs_gtk3/entities/clip.py", line 32 in change
File "/opt/touhy/lib/_elzlibs_gtk3/entities/clip.py", line 41 in read
File "/opt/touhy/lib/elzlibs/calls.py", line 126 in threaded
File "/opt/touhy/lib/elzlibs/entities/clip.py", line 114 in read
File "/opt/touhy/lib/elzlibs/entities/clip.py", line 100 in replacement
File "/opt/touhy/lib/elzlibs/images/plans.py", line 235 in text
File "/opt/touhy/lib/elzlibs/images/gears.py", line 220 in clip
File "/opt/touhy/lib/elzlibs/images/plans.py", line 80 in perform
File "/opt/touhy/lib/elzlibs/images/plans.py", line 103 in perform
File "/opt/touhy/lib/elzlibs/images/plans.py", line 103 in perform
File "/opt/touhy/lib/elzlibs/images/plans.py", line 103 in perform
File "/opt/touhy/lib/elzlibs/images/plans.py", line 121 in perform
File "/opt/touhy/lib/elzlibs/images/plans.py", line 103 in perform
File "/opt/touhy/lib/elzlibs/images/plans.py", line 103 in perform
File "/opt/touhy/lib/elzlibs/images/__init__.py", line 20 in icon
File "/opt/touhy/lib/sencol/clips/__init__.py", line 21 in update
File "/opt/touhy/lib/elzlibs/calls.py", line 126 in threaded
File "/opt/touhy/lib/elzlibs/calls.py", line 199 in safely
File "/opt/touhy/lib/elzlibs/calls.py", line 29 in __call__
File "/opt/touhy/lib/elzlibs/calls.py", line 70 in warn
File "/opt/touhy/lib/elzlibs/entities/clip.py", line 32 in updates
File "/opt/touhy/lib/_elzlibs_gtk3/entities/clip.py", line 32 in change
File "/opt/touhy/lib/_elzlibs_gtk3/entities/clip.py", line 41 in read
File "/opt/touhy/lib/elzlibs/calls.py", line 126 in threaded
File "/opt/touhy/lib/elzlibs/entities/clip.py", line 114 in read
File "/opt/touhy/lib/elzlibs/entities/clip.py", line 100 in replacement
File "/opt/touhy/lib/elzlibs/images/plans.py", line 235 in text
File "/opt/touhy/lib/elzlibs/images/gears.py", line 220 in clip
File "/opt/touhy/lib/elzlibs/images/plans.py", line 80 in perform
File "/opt/touhy/lib/elzlibs/images/plans.py", line 103 in perform
File "/opt/touhy/lib/elzlibs/images/plans.py", line 103 in perform
File "/opt/touhy/lib/elzlibs/images/plans.py", line 103 in perform
File "/opt/touhy/lib/elzlibs/images/plans.py", line 121 in perform
File "/opt/touhy/lib/elzlibs/images/plans.py", line 103 in perform
File "/opt/touhy/lib/elzlibs/images/plans.py", line 103 in perform
...
Thread 0x00007efec37fe700 (most recent call first):
File "/usr/lib/python3.7/socket.py", line 212 in accept
File "/opt/touhy/lib/elzlibs/shared.py", line 89 in wait
File "/usr/lib/python3.7/threading.py", line 870 in run
File "/usr/lib/python3.7/threading.py", line 926 in _bootstrap_inner
File "/usr/lib/python3.7/threading.py", line 890 in _bootstrap
Thread 0x00007efec3fff700 (most recent call first):
File "/usr/lib/python3.7/socket.py", line 212 in accept
File "/opt/touhy/lib/elzlibs/shared.py", line 89 in wait
File "/usr/lib/python3.7/threading.py", line 870 in run
File "/usr/lib/python3.7/threading.py", line 926 in _bootstrap_inner
File "/usr/lib/python3.7/threading.py", line 890 in _bootstrap
Thread 0x00007efee0e3d700 (most recent call first):
File "/usr/lib/python3.7/socket.py", line 212 in accept
File "/opt/touhy/lib/elzlibs/shared.py", line 89 in wait
File "/usr/lib/python3.7/threading.py", line 870 in run
File "/usr/lib/python3.7/threading.py", line 926 in _bootstrap_inner
File "/usr/lib/python3.7/threading.py", line 890 in _bootstrap
Thread 0x00007efee163e700 (most recent call first):
File "/usr/lib/python3.7/socket.py", line 212 in accept
File "/opt/touhy/lib/elzlibs/shared.py", line 89 in wait
File "/usr/lib/python3.7/threading.py", line 870 in run
File "/usr/lib/python3.7/threading.py", line 926 in _bootstrap_inner
File "/usr/lib/python3.7/threading.py", line 890 in _bootstrap
Thread 0x00007efee1e3f700 (most recent call first):
File "/usr/lib/python3.7/socket.py", line 212 in accept
File "/opt/touhy/lib/elzlibs/shared.py", line 89 in wait
File "/usr/lib/python3.7/threading.py", line 870 in run
File "/usr/lib/python3.7/threading.py", line 926 in _bootstrap_inner
File "/usr/lib/python3.7/threading.py", line 890 in _bootstrap
Thread 0x00007efee2640700 (most recent call first):
File "/opt/touhy/lib/elzlibs/shared.py", line 223 in modchecker
File "/usr/lib/python3.7/threading.py", line 870 in run
File "/usr/lib/python3.7/threading.py", line 926 in _bootstrap_inner
File "/usr/lib/python3.7/threading.py", line 890 in _bootstrap
Thread 0x00007efee2e41700 (most recent call first):
File "/usr/lib/python3.7/socket.py", line 212 in accept
File "/opt/touhy/lib/elzlibs/shared.py", line 89 in wait
File "/usr/lib/python3.7/threading.py", line 870 in run
File "/usr/lib/python3.7/threading.py", line 926 in _bootstrap_inner
File "/usr/lib/python3.7/threading.py", line 890 in _bootstrap
Thread 0x00007efee3682700 (most recent call first):
File "/opt/touhy/lib/elzlibs/calls.py", line 184 in wait
File "/usr/lib/python3.7/threading.py", line 870 in run
File "/usr/lib/python3.7/threading.py", line 926 in _bootstrap_inner
File "/usr/lib/python3.7/threading.py", line 890 in _bootstrap
Thread 0x00007efee3e83700 (most recent call first):
File "/usr/lib/python3.7/socket.py", line 212 in accept
File "/opt/touhy/lib/elzlibs/shared.py", line 89 in wait
File "/usr/lib/python3.7/threading.py", line 870 in run
File "/usr/lib/python3.7/threading.py", line 926 in _bootstrap_inner
File "/usr/lib/python3.7/threading.py", line 890 in _bootstrap
Thread 0x00007efee4684700 (most recent call first):
File "/usr/lib/python3.7/socket.py", line 212 in accept
File "/opt/touhy/lib/elzlibs/shared.py", line 89 in wait
File "/usr/lib/python3.7/threading.py", line 870 in run
File "/usr/lib/python3.7/threading.py", line 926 in _bootstrap_inner
File "/usr/lib/python3.7/threading.py", line 890 in _bootstrap
Thread 0x00007efee947f740 (most recent call first):
File "/usr/lib/python3.7/threading.py", line 296 in wait
File "/usr/lib/python3.7/queue.py", line 170 in get
File "/opt/touhy/lib/elzlibs/calls.py", line 210 in mainloop
File "/opt/touhy/lib/elzlibs/utils.py", line 87 in selfdestructing
File "/opt/touhy/lib/sencol/__main__.py", line 54 in <module>
File "<frozen importlib._bootstrap>", line 219 in _call_with_frames_removed
File "<frozen importlib._bootstrap_external>", line 728 in exec_module
File "<frozen importlib._bootstrap>", line 677 in _load_unlocked
File "<frozen importlib._bootstrap>", line 967 in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 983 in _find_and_load
File "<frozen importlib._bootstrap>", line 219 in _call_with_frames_removed
File "<frozen importlib._bootstrap>", line 1035 in _handle_fromlist
Abandon
Re-edit : et du coup, vu que j'étais précisément en train de faire quelques petites retouches sur ce qui semble être le module coupable, j'en profite pour inspecter ça… Ces deux lignes-là en particulier attirent mon attention :
File "/opt/touhy/lib/_elzlibs_gtk3/entities/clip.py", line 32 in change
File "/opt/touhy/lib/_elzlibs_gtk3/entities/clip.py", line 41 in read
Elles sont placées successivement, donc un appel suit immédiatement l'autre. Or, la méthode read n'appelle à aucun moment la méthode change. En revanche, à ce qui était jusque là la ligne 41 (c'est en train de changer ^^), on trouve « clip(selection).wait_for_text() », et la méthode change est branchée sur l'événement « owner-change » du presse-papier GTK. Puisque la méthode wait_for_text() peut laisser passer plusieurs itérations de la boucle principale GTK avant de renvoyer son résultat, je suppose donc que ce qui cause le crash doit être la modification du contenu du presse-papier pendant que sencol est en train de générer les images montrant ledit contenu (quand c'est du texte, il fait un petit aperçu où on voit les premiers caractères). Modification du contenu qui déclenche la mise à jour desdites images, et donc une sorte d'appel récursif.
Ceci dit, vu que c'est au niveau de la mécanique interne de GTK (et que tout se passe dans le thread GTK, pas de souci d'accès concurent à ce niveau), à part essayer de débrancher l'écouteur de modifications le temps de finir la lecture, je ne vois pas trop ce qui est faisable…
(En parlant de crash violents : d'après le collègue spécialiste dudit langage avec qui j'ai donné quelques cours au semestre dernier, en C#, il ne serait pas possible de récupérer d'une division par zéro ? :o)
grim7reaper a écritLà je pensais qu’on était dans un cas où on nous parlera plus jamais.
A priori, c'est bien le cas : ce sont les cas où le fichier qui servait à identifier la socket a été supprimé, donc je ne pense pas qu'il y ait moyen de la récupérer dans ce cas (ceci dit, j'ai tendance dans mon code à utiliser socket.sendto pour communiquer avec les socket DGRAM, donc sans passer par socket.connect, mais, je viens de vérifier, c'est tout à fait possible de connecter la socket d'abord, puis de supprimer le fichier, puis de continuer à envoyer des choses qui sont bien reçues).
Un comportement possiblement intelligent serait, plutôt qu'un message qui termine le thread directement, d'envoyer un message qui fait que le thread vérifie si son fichier existe toujours et se termine si ce n'est pas le cas ? (En utilisant dans ce cas la manip' sus-mentionnées pour que le message arrive après la suppression effective du fichier, tant qu'à faire).
D'ailleurs, ce même message pourrait aussi servir à vérifier que le programme est toujours à l'écoute, au cas où il aurait lamentablement crashé sans nettoyer proprement derrière lui…
grim7reaper a écritÇa serait pas déconnant :p
J’ai découvert qu’il y avait une espèce de guerre trébuchet vs catapulte similaire à tab vs space ou Vim vs Emacs :p
Genre
ici ^^
Oui, c'est pour ça que je disais ça 🙂
(Mais on me souffle dans l'oreillette que les gens de LineageOS y ont déjà pensé)
Sinon, on vient de me suggérer de partir plutôt sur les lanceurs de fusée. En anglais, ça s'appelle « Launch Vehicle » (pas forcément très cool à utiliser), mais aussi « Carrier Rocket ». Du coup, je me dit que « crocket » pourrait être un nom sympa, qu'en dites-vous ? ^^