--- rpl/src/rpl.c 2017/08/03 08:30:49 1.198 +++ rpl/src/rpl.c 2019/02/07 21:44:15 1.207 @@ -1,7 +1,7 @@ /* ================================================================================ - RPL/2 (R) version 4.1.27 - Copyright (C) 1989-2017 Dr. BERTRAND Joël + RPL/2 (R) version 4.1.31 + Copyright (C) 1989-2019 Dr. BERTRAND Joël This file is part of RPL/2. @@ -315,6 +315,9 @@ rplinit(int argc, char *argv[], char *en # 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) @@ -449,11 +452,11 @@ rplinit(int argc, char *argv[], char *en if ((*s_etat_processus).langue == 'F') { - printf("+++Copyright (C) 1989 à 2016, 2017 BERTRAND Joël\n"); + printf("+++Copyright (C) 1989 à 2018, 2019 BERTRAND Joël\n"); } else { - printf("+++Copyright (C) 1989 to 2016, 2017 BERTRAND Joel\n"); + printf("+++Copyright (C) 1989 to 2018, 2019 BERTRAND Joel\n"); } } @@ -6116,12 +6119,29 @@ rplinit(int argc, char *argv[], char *en INCR_GRANULARITE(attente.tv_nsec); } + attente.tv_sec = 0; + attente.tv_nsec = GRANULARITE_us * 1000; + + while(pthread_mutex_trylock(&((*s_etat_processus).mutex_pile_processus)) + == EBUSY) + { + nanosleep(&attente, NULL); + INCR_GRANULARITE(attente.tv_nsec); + } + + pthread_mutex_unlock(&((*s_etat_processus).mutex_pile_processus)); pthread_mutex_destroy(&((*s_etat_processus).mutex_pile_processus)); pthread_mutex_destroy(&((*s_etat_processus).mutex_allocation)); pthread_mutex_destroy(&((*s_etat_processus).mutex_interruptions)); pthread_mutex_destroy(&mutex_sections_critiques); pthread_mutex_destroy(&mutex_liste_variables_partagees); + free((*s_etat_processus).localisation); + + destruction_queue_signaux(s_etat_processus); + pthread_mutex_destroy(&((*s_etat_processus).mutex_signaux)); + liberation_contexte_cas(s_etat_processus); + # ifndef SEMAPHORES_NOMMES sem_post(&((*s_etat_processus).semaphore_fork)); sem_destroy(&((*s_etat_processus).semaphore_fork)); @@ -6131,12 +6151,6 @@ rplinit(int argc, char *argv[], char *en SEM_FORK); # endif - free((*s_etat_processus).localisation); - - destruction_queue_signaux(s_etat_processus); - pthread_mutex_destroy(&((*s_etat_processus).mutex_signaux)); - liberation_contexte_cas(s_etat_processus); - free((*s_etat_processus).chemin_fichiers_temporaires); if ((*s_etat_processus).requete_redemarrage == d_vrai)