--- rpl/src/instructions_d5.c 2010/04/28 09:38:27 1.15 +++ rpl/src/instructions_d5.c 2010/04/28 11:05:45 1.16 @@ -1864,11 +1864,11 @@ instruction_detach(struct_processus *s_e } else { - if ((*s_etat_processus).at_exit != NULL) + if (((*s_etat_processus).var_volatile_alarme == 0) + && ((*s_etat_processus).arret_depuis_abort == 0) + && ((*s_etat_processus).at_exit != NULL)) { (*s_etat_processus).var_volatile_requete_arret = 0; - (*s_etat_processus) - .var_volatile_traitement_retarde_stop = -1; if (evaluation(s_etat_processus, (*s_etat_processus).at_exit, 'E') == d_erreur) @@ -1895,8 +1895,6 @@ instruction_detach(struct_processus *s_e if ((*s_etat_processus).at_exit != NULL) { (*s_etat_processus).var_volatile_requete_arret = 0; - (*s_etat_processus) - .var_volatile_traitement_retarde_stop = -1; if (evaluation(s_etat_processus, (*s_etat_processus).at_exit, 'E') == d_erreur) @@ -2139,9 +2137,18 @@ instruction_detach(struct_processus *s_e } else { - kill((*(*((struct_processus_fils *) - (*(*l_element_courant).donnee).objet)).thread).pid, - SIGFSTOP); + if ((*s_etat_processus).arret_depuis_abort == -1) + { + kill((*(*((struct_processus_fils *) + (*(*l_element_courant).donnee).objet)).thread) + .pid, SIGFABORT); + } + else + { + kill((*(*((struct_processus_fils *) + (*(*l_element_courant).donnee).objet)).thread) + .pid, SIGFSTOP); + } } } else @@ -2188,9 +2195,18 @@ instruction_detach(struct_processus *s_e } else { - pthread_kill((*(*((struct_processus_fils *) - (*(*l_element_courant).donnee).objet)).thread) - .tid, SIGFSTOP); + if ((*s_etat_processus).arret_depuis_abort == -1) + { + pthread_kill((*(*((struct_processus_fils *) + (*(*l_element_courant).donnee).objet)) + .thread).tid, SIGFABORT); + } + else + { + pthread_kill((*(*((struct_processus_fils *) + (*(*l_element_courant).donnee).objet)) + .thread).tid, SIGFSTOP); + } } }