--- rpl/src/interruptions.c 2010/04/21 13:45:50 1.9 +++ rpl/src/interruptions.c 2010/04/29 07:30:58 1.11 @@ -1957,11 +1957,25 @@ 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) { - printf("[%d] SIGFSTOP (thread %llu)\n", (int) getpid(), - (unsigned long long) pthread_self()); - fflush(stdout); + if (signal == SIGFSTOP) + { + printf("[%d] SIGFSTOP (thread %llu)\n", (int) getpid(), + (unsigned long long) pthread_self()); + fflush(stdout); + } + else + { + printf("[%d] SIGFABORT (thread %llu)\n", (int) getpid(), + (unsigned long long) pthread_self()); + fflush(stdout); + } } /* @@ -1982,11 +1996,23 @@ interruption5(int signal, siginfo_t *sig } 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) { - pthread_kill(thread, SIGFSTOP); + pthread_kill(thread, signal); deverrouillage_gestionnaire_signaux(); return; } @@ -2110,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; }