--- rpl/src/interruptions.c 2010/04/28 11:05:45 1.10 +++ rpl/src/interruptions.c 2010/04/29 07:30:58 1.11 @@ -1957,6 +1957,11 @@ interruption5(int signal, siginfo_t *sig return; } + if (signal == SIGFABORT) + { + (*s_etat_processus).arret_depuis_abort = -1; + } + if (((*s_etat_processus).type_debug & d_debug_signaux) != 0) { if (signal == SIGFSTOP) @@ -1980,25 +1985,29 @@ interruption5(int signal, siginfo_t *sig * -1 -> traitement retardé (un ou plusieurs signaux stop reçus) */ - if (signal == SIGFSTOP) + if ((*s_etat_processus).var_volatile_traitement_retarde_stop == 0) { - if ((*s_etat_processus).var_volatile_traitement_retarde_stop == 0) - { - (*s_etat_processus).var_volatile_requete_arret = -1; - } - else - { - (*s_etat_processus).var_volatile_traitement_retarde_stop = -1; - } + (*s_etat_processus).var_volatile_requete_arret = -1; } else { - (*s_etat_processus).var_volatile_requete_arret = -1; - (*s_etat_processus).arret_depuis_abort = -1; + (*s_etat_processus).var_volatile_traitement_retarde_stop = -1; } } else { + if ((s_etat_processus = recherche_thread(getpid(), pthread_self())) + == NULL) + { + deverrouillage_gestionnaire_signaux(); + return; + } + + if (signal == SIGFABORT) + { + (*s_etat_processus).arret_depuis_abort = -1; + } + // Envoi d'un signal au thread maître du groupe. if (recherche_thread_principal(getpid(), &thread) == d_vrai) @@ -2127,7 +2136,7 @@ interruption9(int signal, siginfo_t *sig fflush(stdout); } - pthread_kill((*s_etat_processus).tid_processus_pere, SIGFSTOP); + pthread_kill((*s_etat_processus).tid_processus_pere, SIGFABORT); deverrouillage_gestionnaire_signaux(); return; }