--- rpl/src/instructions_d5.c 2019/02/06 14:23:26 1.166 +++ rpl/src/instructions_d5.c 2019/02/11 06:18:20 1.168 @@ -2243,7 +2243,8 @@ instruction_detach(struct_processus *s_e { if ((*s_etat_processus).var_volatile_alarme != 0) { - envoi_signal_thread((*(*((struct_processus_fils *) + envoi_signal_thread(s_etat_processus, + (*(*((struct_processus_fils *) (*(*l_element_courant).donnee).objet)).thread) .tid, rpl_sigurg); } @@ -2251,13 +2252,15 @@ instruction_detach(struct_processus *s_e { if ((*s_etat_processus).arret_depuis_abort == -1) { - envoi_signal_thread((*(*((struct_processus_fils *) + envoi_signal_thread(s_etat_processus, + (*(*((struct_processus_fils *) (*(*l_element_courant).donnee).objet)) .thread).tid, rpl_sigabort); } else { - envoi_signal_thread((*(*((struct_processus_fils *) + envoi_signal_thread(s_etat_processus, + (*(*((struct_processus_fils *) (*(*l_element_courant).donnee).objet)) .thread).tid, rpl_sigstop); } @@ -2304,7 +2307,7 @@ instruction_detach(struct_processus *s_e .donnee).objet)).thread).nombre_objets_dans_pipe--; action.sa_handler = SIG_IGN; - action.sa_flags = SA_ONSTACK; + action.sa_flags = 0; if (sigaction(SIGPIPE, &action, ®istre) != 0) { @@ -2724,12 +2727,18 @@ instruction_detach(struct_processus *s_e attente.tv_sec = 0; attente.tv_nsec = GRANULARITE_us * 1000; + pthread_mutex_lock(&((*s_etat_processus).mutex_pile_processus)); + while(nombre_thread_surveillance_processus != 0) { + pthread_mutex_unlock(&((*s_etat_processus).mutex_pile_processus)); nanosleep(&attente, NULL); INCR_GRANULARITE(attente.tv_nsec); + pthread_mutex_lock(&((*s_etat_processus).mutex_pile_processus)); } + pthread_mutex_unlock(&((*s_etat_processus).mutex_pile_processus)); + closelog(); retrait_thread(s_etat_processus);