--- rpl/src/rpl.c 2019/02/07 21:44:15 1.207 +++ rpl/src/rpl.c 2019/02/11 09:45:52 1.210 @@ -313,11 +313,13 @@ rplinit(int argc, char *argv[], char *en pthread_mutex_init(&mutex_liste_threads, &attributs_mutex); pthread_mutexattr_destroy(&attributs_mutex); + pthread_mutexattr_init(&attributs_mutex); + pthread_mutexattr_settype(&attributs_mutex, PTHREAD_MUTEX_RECURSIVE); + pthread_mutex_init(&mutex_sigaction, &attributs_mutex); + pthread_mutexattr_destroy(&attributs_mutex); + # ifndef SEMAPHORES_NOMMES sem_init(&((*s_etat_processus).semaphore_fork), 0, 0); -uprintf("[%d-%llu] Semaphore fork %p (rpl.c)\n", (int) getpid(), - (unsigned long long) pthread_self(), - &((*s_etat_processus).semaphore_fork)); # else if (((*s_etat_processus).semaphore_fork = sem_init3(0, getpid(), pthread_self(), SEM_FORK)) == SEM_FAILED) @@ -5436,7 +5438,7 @@ uprintf("[%d-%llu] Semaphore fork %p (rp if ((*s_etat_processus).var_volatile_alarme != 0) { - envoi_signal_thread( + envoi_signal_thread(s_etat_processus, (*(*((struct_processus_fils *) (*(*((struct_liste_chainee *) l_element_courant)).donnee).objet)) @@ -5447,7 +5449,7 @@ uprintf("[%d-%llu] Semaphore fork %p (rp if ((*s_etat_processus).arret_depuis_abort == -1) { - envoi_signal_thread( + envoi_signal_thread(s_etat_processus, (*(*((struct_processus_fils *) (*(*((struct_liste_chainee *) l_element_courant)).donnee) @@ -5456,7 +5458,7 @@ uprintf("[%d-%llu] Semaphore fork %p (rp } else { - envoi_signal_thread( + envoi_signal_thread(s_etat_processus, (*(*((struct_processus_fils *) (*(*((struct_liste_chainee *) l_element_courant)).donnee) @@ -6113,12 +6115,18 @@ uprintf("[%d-%llu] Semaphore fork %p (rp 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)); + attente.tv_sec = 0; attente.tv_nsec = GRANULARITE_us * 1000; @@ -6168,6 +6176,7 @@ uprintf("[%d-%llu] Semaphore fork %p (rp liberation_allocateur_buffer(s_etat_processus); pthread_mutex_destroy(&((*s_etat_processus).mutex_allocation_buffer)); pthread_mutex_destroy(&mutex_liste_threads); + pthread_mutex_destroy(&mutex_sigaction); sys_free(s_etat_processus); sys_free(arg_exec);