Page 1 sur 1

1.2.2-81 compil et jordan

Publié : mer. sept. 14, 2016 3:57 pm
par frederic han
Salut,
je n'arrive pas a reproduire cela avec ton binaire linux amd64 1.2.2-81, mais lorsque je compile
le source de la 1.2.2-81 (dans les 2 cas j'ai fait avec --disable-gui)

J'ai le crash suivant (pas toujours au premier essai de jordan(A) parfois je dois en faire 5 ou 6):

Code : Tout sélectionner

1>> jordan(A)
[New Thread 0x7fffedbc9700 (LWP 15329)]

Program received signal SIGSEGV, Segmentation fault.
giac::mutexptr (contextptr=contextptr@entry=0x7fffedbc6320) at global.cc:1046
1046	      return contextptr->globalptr->_mutexptr;
(gdb) bt
#0  giac::mutexptr (contextptr=contextptr@entry=0x7fffedbc6320)
    at global.cc:1046
#1  0x00007ffff75219ce in giac::is_context_busy (contextptr=0x7fffedbc6320)
    at global.cc:1051
#2  0x00007ffff75296ec in giac::check_thread (contextptr=0x7fffedbc6320)
    at global.cc:3445
#3  0x000000000040ea1e in xcas::icas_eval (g=..., gg=..., 
    reading_file=@0x7fffffffe020: 0, filename="", 
    contextptr=contextptr@entry=0x7fffffffe0f0) at Xcas1.cc:3208
#4  0x0000000000406936 in main (ARGC=<optimized out>, ARGV=<optimized out>)
    at icas.cc:923
ou bien

Code : Tout sélectionner

---------------------------------------------
ou bien avec threads:=1


Program received signal SIGSEGV, Segmentation fault.
giac::mutexptr (contextptr=contextptr@entry=0x7fffb16d8c10) at global.cc:1076
1076	      return contextptr->globalptr->_mutexptr;
(gdb) bt
#0  giac::mutexptr (contextptr=contextptr@entry=0x7fffb16d8c10) at global.cc:1076
#1  0x00007ffff74f12de in giac::is_context_busy (contextptr=0x7fffb16d8c10) at global.cc:1081
#2  0x00007ffff74f9139 in giac::check_thread (contextptr=0x7fffb16d8c10) at global.cc:3479
#3  0x00000000004121d6 in xcas::icas_eval (g=..., gg=..., reading_file=@0x7fffffffd7f0: 0, filename="", contextptr=contextptr@entry=0x7fffffffd8b0) at Xcas1.cc:3280
#4  0x000000000040a23b in main (ARGC=<optimized out>, ARGV=<optimized out>) at icas.cc:1445


--------------------------------------
ou bien compile sur une autre machine avec --disable-gui

1>> jordan(A)
[New Thread 0x7fffedbc9700 (LWP 15329)]

Program received signal SIGSEGV, Segmentation fault.
giac::mutexptr (contextptr=contextptr@entry=0x7fffedbc6320) at global.cc:1046
1046	      return contextptr->globalptr->_mutexptr;
(gdb) bt
#0  giac::mutexptr (contextptr=contextptr@entry=0x7fffedbc6320)
    at global.cc:1046
#1  0x00007ffff75219ce in giac::is_context_busy (contextptr=0x7fffedbc6320)
    at global.cc:1051
#2  0x00007ffff75296ec in giac::check_thread (contextptr=0x7fffedbc6320)
    at global.cc:3445
#3  0x000000000040ea1e in xcas::icas_eval (g=..., gg=..., 
    reading_file=@0x7fffffffe020: 0, filename="", 
    contextptr=contextptr@entry=0x7fffffffe0f0) at Xcas1.cc:3208
#4  0x0000000000406936 in main (ARGC=<optimized out>, ARGV=<optimized out>)
    at icas.cc:923

Re: 1.2.2-81 compil et jordan

Publié : mer. sept. 14, 2016 6:23 pm
par parisse
avec une matrice dans A ou juste jordan sur un A formel?

Re: 1.2.2-81 compil et jordan

Publié : mer. sept. 14, 2016 8:15 pm
par frederic han
oops, j'ai oublie de coller le debut.

C'est avec:

Code : Tout sélectionner

A:=companion((x^3-2)^2)
comme dans la test-suite de giac.

Re: 1.2.2-81 compil et jordan

Publié : jeu. sept. 15, 2016 5:54 am
par parisse
J'ai effectivement un probleme avec le source 1.2.2-85 parce que j'y ai rajoute une fonction release_globals() et j'ai mis des delete de pointeurs dans le mauvais ordre, mais c'est bizarre que le probleme existe avec la 1.2.2-81.

Re: 1.2.2-81 compil et jordan

Publié : jeu. sept. 15, 2016 7:58 am
par frederic han
j'ai aussi le probleme avec une 1.2.2-69 compilee avec --disable-gui.

Code : Tout sélectionner

giac::mutexptr (contextptr=contextptr@entry=0x7fffb16f3c10) at global.cc:1061
1061	global.cc: Aucun fichier ou dossier de ce type.
(gdb) bt
#0  giac::mutexptr (contextptr=contextptr@entry=0x7fffb16f3c10) at global.cc:1061
#1  0x00007ffff74f528e in giac::is_context_busy (contextptr=0x7fffb16f3c10) at global.cc:1066
#2  0x00007ffff74fd099 in giac::check_thread (contextptr=0x7fffb16f3c10) at global.cc:3463
#3  0x00000000004121d6 in xcas::icas_eval (g=..., gg=..., reading_file=@0x7fffffffd580: 0, filename="", 
    contextptr=contextptr@entry=0x7fffffffd640) at Xcas1.cc:3280
#4  0x000000000040a23b in main (ARGC=<optimized out>, ARGV=<optimized out>) at icas.cc:1445

Re: 1.2.2-81 compil et jordan

Publié : jeu. sept. 15, 2016 8:39 am
par parisse
Apres correction de release_globals(), j'ai teste 10 fois jordan sans erreur, puis j'ai teste avec valgrind qui ne detecte rien, du coup je ne vois pas ce que je peux faire...

Re: 1.2.2-81 compil et jordan

Publié : ven. sept. 16, 2016 12:59 pm
par frederic han
J'ai aussi le PB avec la testing 1.2.2.85.

plus precisement, sur differentes machines linux amd64, j'ai essaye, gcc-4.9.2, gcc-4.8.4, gcc-6.1.1 et

./icas crash avant la fin sur:

Code : Tout sélectionner

A:=companion((x^3-2)^2);
jordan(A);
for(j:=0;j<20;j++){jordan(A);print(j)}:;
En revanche sur la machine ou il y a gcc-4.8.4 (ubuntu 14.04 amd64), si j'utilise gcc-4.4 alors ./icas arrive a faire ce calcul. A part ton binaire, c'est la premiere version que je compile qui passe ces 20 tests.

Et toi, tu as aussi un gcc ancien?

Re: 1.2.2-81 compil et jordan

Publié : ven. sept. 16, 2016 1:57 pm
par frederic han
Bon pour finir je fini par avoir le probleme aussi avec la version en gcc-4.4 mais je ne l'ai toujours pas eu avec ton binaire.

Re: 1.2.2-81 compil et jordan

Publié : ven. sept. 16, 2016 2:02 pm
par parisse
Sur ma machine de dev, c'est gcc 4.4.7 de la distrib debian stable precedente. La machine de compilation est en xubuntu, probablement 14.04 et doit utiliser un gcc de la meme epoque.

Re: 1.2.2-81 compil et jordan

Publié : ven. sept. 16, 2016 3:15 pm
par parisse
Le coupable est peut-etre une race condition entre destruction de contexte et test des contextes actifs par l'application principale.
Dans le cas qui nous occupe, c'est un contexte cree ligne 2188 de vecteur.cc qui pose probleme (dixit valgrind apres une dizaine d'iterations environ), il suffirait d'ajouter juste apres:

Code : Tout sélectionner

#ifdef HAVE_LIBPTHREAD
    pthread_mutex_lock(&context_list_mutex);
#endif
    context_list().pop_back();
#ifdef HAVE_LIBPTHREAD
    pthread_mutex_unlock(&context_list_mutex);
#endif

Re: 1.2.2-81 compil et jordan

Publié : ven. sept. 16, 2016 5:11 pm
par frederic han
Bien vu, les premiers essais sont concluants.
Ouf!