--- rpl/src/instructions_d5.c 2010/04/17 18:57:35 1.10 +++ rpl/src/instructions_d5.c 2010/04/28 09:38:27 1.15 @@ -1,6 +1,6 @@ /* ================================================================================ - RPL/2 (R) version 4.0.14 + RPL/2 (R) version 4.0.15 Copyright (C) 1989-2010 Dr. BERTRAND Joël This file is part of RPL/2. @@ -1522,6 +1522,9 @@ instruction_detach(struct_processus *s_e (*s_etat_processus).nombre_interruptions_non_affectees = 0; (*s_etat_processus).processus_detache = d_vrai; + liberation(s_etat_processus, (*s_etat_processus).at_exit); + (*s_etat_processus).at_exit = NULL; + for(i = 0; i < d_NOMBRE_INTERRUPTIONS; i++) { liberation(s_etat_processus, @@ -1859,6 +1862,22 @@ instruction_detach(struct_processus *s_e d_ex_erreur_evaluation; } } + else + { + 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) + { + (*s_etat_processus).erreur_execution = + d_ex_erreur_evaluation; + } + } + } } else { @@ -1871,11 +1890,29 @@ instruction_detach(struct_processus *s_e d_ex_erreur_evaluation; } } + else + { + 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) + { + (*s_etat_processus).erreur_execution = + d_ex_erreur_evaluation; + } + } + } liberation(s_etat_processus, s_copie); } } + liberation(s_etat_processus, (*s_etat_processus).at_exit); + l_element_courant = (*s_etat_processus).liste_mutexes; while(l_element_courant != NULL) {