--- rpl/src/instructions_d5.c 2010/09/11 16:46:19 1.42 +++ rpl/src/instructions_d5.c 2010/12/14 15:46:24 1.45 @@ -1,6 +1,6 @@ /* ================================================================================ - RPL/2 (R) version 4.0.19 + RPL/2 (R) version 4.0.20 Copyright (C) 1989-2010 Dr. BERTRAND Joël This file is part of RPL/2. @@ -2862,8 +2862,11 @@ instruction_detach(struct_processus *s_e liberation(s_etat_processus, s_objet); # if !defined(Cygwin) && !defined(OpenBSD) - (*s_etat_processus).pile_signal.ss_flags = SS_DISABLE; - sigaltstack(&((*s_etat_processus).pile_signal), NULL); + do + { + (*s_etat_processus).pile_signal.ss_flags = SS_DISABLE; + } + while(sigaltstack(&((*s_etat_processus).pile_signal), NULL) != 0); free((*s_etat_processus).pile_signal.ss_sp); # endif @@ -3021,6 +3024,9 @@ instruction_detach(struct_processus *s_e // Être sûr que le processus fils soit déjà présent... + attente.tv_sec = 0; + attente.tv_nsec = GRANULARITE_us * 1000; + while(kill((*s_argument_thread).pid, 0) != 0) { //if ((errno != ESRCH) && (errno != EAGAIN)) @@ -3032,6 +3038,7 @@ instruction_detach(struct_processus *s_e } nanosleep(&attente, NULL); + INCR_GRANULARITE(attente.tv_nsec); } // Le fils peut être présent sans être en attente du signal de départ.