--- rpl/src/gestion_threads.c 2010/04/27 15:53:36 1.10 +++ rpl/src/gestion_threads.c 2010/04/28 11:05:45 1.14 @@ -263,14 +263,21 @@ lancement_thread(void *argument) } else { - if (evaluation(s_etat_processus, (*s_etat_processus).on_exit, 'E') - == d_erreur) + if (((*s_etat_processus).var_volatile_alarme == 0) + && ((*s_etat_processus).arret_depuis_abort == 0) + && ((*s_etat_processus).at_exit != NULL)) { - if (((*s_etat_processus).erreur_execution == d_ex) && - ((*s_etat_processus).erreur_systeme == d_es)) + (*s_etat_processus).var_volatile_requete_arret = 0; + + if (evaluation(s_etat_processus, (*s_etat_processus).at_exit, + 'E') == d_erreur) { - (*s_etat_processus).erreur_execution = - d_ex_erreur_evaluation; + if (((*s_etat_processus).erreur_execution == d_ex) && + ((*s_etat_processus).erreur_systeme == d_es)) + { + (*s_etat_processus).erreur_execution = + d_ex_erreur_evaluation; + } } } } @@ -485,8 +492,16 @@ lancement_thread(void *argument) } 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 @@ -576,9 +591,18 @@ lancement_thread(void *argument) (*(*l_element_courant).donnee).objet)).thread) .thread_actif == d_vrai) { - 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); + } } if (pthread_mutex_unlock(&((*(*((struct_processus_fils *) @@ -1004,7 +1028,7 @@ lancement_thread(void *argument) } liberation(s_etat_processus, (*s_argument_thread).argument); - liberation(s_etat_processus, (*s_etat_processus).on_exit); + liberation(s_etat_processus, (*s_etat_processus).at_exit); for(i = 0; i < d_NOMBRE_INTERRUPTIONS; i++) {