GL4Dummies icon indicating copy to clipboard operation
GL4Dummies copied to clipboard

Bug : crash lors de la sauvegarde d'un shader

Open eternablue opened this issue 10 months ago • 3 comments

Reproduction du bug :

Sur plusieurs systèmes, lorsque j'effectue une modification à un shader pendant l'exécution du programme (que la modification soit du code valide ou non) de temps en temps le programme segfault. 0xc0000005 (Access Violation sur windows). Après avoir attaché un debugger il s'agirait d'un déréférencement de pointeur nul dans GL4Dummies.dll

C:\Users\amsi\Documents\work\fromGIT\GL4Dummies\lib_src\GL4D\gl4dummies.c:92:In FUNC: une erreur s'est produite lors de la lecture du fichier shaders/main.gs

ProjetDemoGL4D.exe (processus 6828) s'est terminé avec le code -1073741819 (0xc0000005).

Piste de résolution

Vérifier que le fichier est bien accessible avant de vérifier sa dernière date de modification et sa lecture potentielle.

eternablue avatar Apr 21 '25 15:04 eternablue

ça ne semble pas être un problème d'accès à la date de modification, l'erreur est consécutive au print de la ligne 92 (dans gl4dummies.c) donc après avoir récupéré les infos sur le fichier, c'est le fread qui échoue mais l'erreur est bien récupérée.

Le problème se propage peut-être plus loin, le NULL renvoyé par gl4dReadTextFile est probablement mal géré dans gl4duUpdateShaders (gl4du.c) vers la ligne 689 ou 700

L'idéal est de recompiler la dll sous windows en mode debug, et de tracer un peu plus finement avant de faire des modifications.

noalien avatar Apr 23 '25 16:04 noalien

Bonjour, j'ai recompilé GL4Dummies.dll avec les information de debug et donc voici la trace d'exécution du programme lorsque ce bug se produit (parfois à l'enregistrement du fichier shader)

Image

Je propose donc de rajouter cette vérif dans la fonction gl4duUpdateShaders() puis ce que selon la spécification la fonction peut retourner 0 si il n'y a pas eu de mise à jour :

ptr = addInShadersList(ot, fn, NULL);
if (!ptr)
   return 0;

Image

eternablue avatar May 16 '25 10:05 eternablue

oui la solution semble convenir mais il serait peut-être intéressant de se mettre (au moins le temps d'un 1/20 de seconde) dans une boucle (avec du usleep ou du SDL_Delay) qui attendrait que le fichier soit à nouveau readable ... si à l'issu du petit délai rien ne change on renverait zéro.

noalien avatar May 22 '25 12:05 noalien