--- rpl/src/rpl.c 2019/02/09 13:36:42 1.208 +++ rpl/src/rpl.c 2019/02/17 16:08:41 1.211 @@ -127,7 +127,7 @@ rplinit(int argc, char *argv[], char *en errno = 0; s_queue_signaux = NULL; routine_recursive = 0; - nombre_thread_surveillance_processus = 0; + nombre_threads_surveillance_processus = 0; pid_processus_pere = getpid(); # ifdef DEBUG_PROC @@ -313,6 +313,11 @@ 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); # else @@ -6110,12 +6115,18 @@ rplinit(int argc, char *argv[], char *en attente.tv_sec = 0; attente.tv_nsec = GRANULARITE_us * 1000; - while(nombre_thread_surveillance_processus != 0) + pthread_mutex_lock(&((*s_etat_processus).mutex_pile_processus)); + + while(nombre_threads_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; @@ -6165,6 +6176,7 @@ rplinit(int argc, char *argv[], char *en 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);