--- rpl/src/gestion_threads.c 2011/08/30 14:19:28 1.47 +++ rpl/src/gestion_threads.c 2011/09/03 10:31:50 1.49 @@ -251,33 +251,37 @@ lancement_thread(void *argument) if ((*s_etat_processus).erreur_systeme == d_es) { - if (evaluation(s_etat_processus, (*s_argument_thread).argument, 'E') - == d_erreur) + if (setjmp(contexte_thread) == 0) { - if (((*s_etat_processus).erreur_execution == d_ex) && - ((*s_etat_processus).erreur_systeme == d_es)) + if (evaluation(s_etat_processus, (*s_argument_thread).argument, '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; + } } - } - else - { - if (((*s_etat_processus).var_volatile_alarme == 0) - && ((*s_etat_processus).arret_depuis_abort == 0) - && ((*s_etat_processus).at_exit != NULL)) + else { - (*s_etat_processus).var_volatile_requete_arret = 0; - (*s_etat_processus).var_volatile_traitement_retarde_stop = -1; + 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) - { - if (((*s_etat_processus).erreur_execution == d_ex) && - ((*s_etat_processus).erreur_systeme == d_es)) + 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; + } } } } @@ -909,17 +913,6 @@ lancement_thread(void *argument) while(l_element_courant != NULL) { l_element_suivant = (*l_element_courant).suivant; - - liberation(s_etat_processus, (*l_element_courant).donnee); - free(l_element_courant); - - l_element_courant = l_element_suivant; - } - - l_element_courant = (*s_etat_processus).l_base_pile_undo; - while(l_element_courant != NULL) - { - l_element_suivant = (*l_element_courant).suivant; liberation(s_etat_processus, (*l_element_courant).donnee); free(l_element_courant);