--- rpl/src/instructions_d5.c 2011/06/22 13:26:59 1.56 +++ rpl/src/instructions_d5.c 2011/09/10 20:45:06 1.66 @@ -1,6 +1,6 @@ /* ================================================================================ - RPL/2 (R) version 4.1.0.prerelease.3 + RPL/2 (R) version 4.1.3 Copyright (C) 1989-2011 Dr. BERTRAND Joël This file is part of RPL/2. @@ -814,8 +814,6 @@ instruction_der(struct_processus *s_etat void instruction_detach(struct_processus *s_etat_processus) { - int status; - logical1 drapeau; logical1 variable_partagee; @@ -1324,6 +1322,8 @@ instruction_detach(struct_processus *s_e creation_fifos_signaux(s_etat_processus); # endif + (*s_etat_processus).signal_a_traiter = d_faux; + if ((*s_etat_processus).debug == d_vrai) if (((*s_etat_processus).type_debug & d_debug_processus) != 0) @@ -2076,61 +2076,66 @@ instruction_detach(struct_processus *s_e if ((*s_etat_processus).erreur_systeme == d_es) { - if (variable_partagee == d_faux) + if (setjmp(contexte_processus) == 0) { - if (evaluation(s_etat_processus, s_objet, 'E') == d_erreur) - { - 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 (variable_partagee == d_faux) { - if (((*s_etat_processus).var_volatile_alarme == 0) - && ((*s_etat_processus).arret_depuis_abort == 0) - && ((*s_etat_processus).at_exit != NULL)) + if (evaluation(s_etat_processus, s_objet, 'E') == d_erreur) { - (*s_etat_processus).var_volatile_requete_arret = 0; - - 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)) { (*s_etat_processus).erreur_execution = d_ex_erreur_evaluation; } } - } - } - else - { - if (evaluation(s_etat_processus, s_copie, 'E') == d_erreur) - { - if (((*s_etat_processus).erreur_execution == d_ex) && - ((*s_etat_processus).erreur_systeme == d_es)) + else { - (*s_etat_processus).erreur_execution = - d_ex_erreur_evaluation; + 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; + + if (evaluation(s_etat_processus, + (*s_etat_processus).at_exit, 'E') == + d_erreur) + { + (*s_etat_processus).erreur_execution = + d_ex_erreur_evaluation; + } + } } } else { - if ((*s_etat_processus).at_exit != NULL) + if (evaluation(s_etat_processus, s_copie, 'E') == d_erreur) { - (*s_etat_processus).var_volatile_requete_arret = 0; - - 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)) { (*s_etat_processus).erreur_execution = d_ex_erreur_evaluation; } } - } + else + { + if ((*s_etat_processus).at_exit != NULL) + { + (*s_etat_processus).var_volatile_requete_arret = 0; - liberation(s_etat_processus, s_copie); + if (evaluation(s_etat_processus, + (*s_etat_processus).at_exit, 'E') == + d_erreur) + { + (*s_etat_processus).erreur_execution = + d_ex_erreur_evaluation; + } + } + } + + liberation(s_etat_processus, s_copie); + } } } @@ -2455,8 +2460,6 @@ instruction_detach(struct_processus *s_e while((*s_etat_processus).l_base_pile_processus != NULL) { - status = 0; - l_element_courant = (struct_liste_chainee *) (*s_etat_processus).l_base_pile_processus; @@ -2927,6 +2930,7 @@ instruction_detach(struct_processus *s_e destruction_fifos_signaux(s_etat_processus); # endif + liberation_contexte_cas(s_etat_processus); free(s_etat_processus); # ifdef DEBUG_MEMOIRE