--- rpl/src/interruptions.c 2010/04/21 13:45:50 1.9 +++ rpl/src/interruptions.c 2010/04/28 11:05:45 1.10 @@ -1959,9 +1959,18 @@ interruption5(int signal, siginfo_t *sig 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); + } } /* @@ -1971,13 +1980,21 @@ interruption5(int signal, siginfo_t *sig * -1 -> traitement retardé (un ou plusieurs signaux stop reçus) */ - if ((*s_etat_processus).var_volatile_traitement_retarde_stop == 0) + if (signal == SIGFSTOP) { - (*s_etat_processus).var_volatile_requete_arret = -1; + 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; + } } else { - (*s_etat_processus).var_volatile_traitement_retarde_stop = -1; + (*s_etat_processus).var_volatile_requete_arret = -1; + (*s_etat_processus).arret_depuis_abort = -1; } } else @@ -1986,7 +2003,7 @@ interruption5(int signal, siginfo_t *sig if (recherche_thread_principal(getpid(), &thread) == d_vrai) { - pthread_kill(thread, SIGFSTOP); + pthread_kill(thread, signal); deverrouillage_gestionnaire_signaux(); return; }