--- rpl/src/instructions_s1.c 2015/09/18 13:41:17 1.79 +++ rpl/src/instructions_s1.c 2017/01/18 15:44:22 1.87 @@ -1,7 +1,7 @@ /* ================================================================================ - RPL/2 (R) version 4.1.23 - Copyright (C) 1989-2015 Dr. BERTRAND Joël + RPL/2 (R) version 4.1.26 + Copyright (C) 1989-2017 Dr. BERTRAND Joël This file is part of RPL/2. @@ -3690,7 +3690,6 @@ instruction_syseval(struct_processus *s_ verrouillage_threads_concurrents(s_etat_processus); pid = fork(); - deverrouillage_threads_concurrents(s_etat_processus); if (pid < 0) { @@ -3735,6 +3734,8 @@ instruction_syseval(struct_processus *s_ } else if (pid == 0) { + (*s_etat_processus).erreur_systeme = d_es; + if (close(pipes_entree[1]) != 0) { (*s_etat_processus).erreur_systeme = d_es_processus; @@ -3820,6 +3821,8 @@ instruction_syseval(struct_processus *s_ } else { + deverrouillage_threads_concurrents(s_etat_processus); + if (close(pipes_entree[0]) != 0) { (*s_etat_processus).erreur_systeme = d_es_processus; @@ -3985,21 +3988,25 @@ instruction_syseval(struct_processus *s_ return; } - if (waitpid(pid, &status, 0) == -1) + while(waitpid(pid, &status, 0) == -1) { -# ifndef SEMAPHORES_NOMMES - if (sem_post(&((*s_etat_processus).semaphore_fork)) - != 0) -# else - if (sem_post((*s_etat_processus).semaphore_fork) != 0) -# endif + if (errno != EINTR) { +# ifndef SEMAPHORES_NOMMES + if (sem_post(&((*s_etat_processus).semaphore_fork)) + != 0) +# else + if (sem_post((*s_etat_processus).semaphore_fork) + != 0) +# endif + { + (*s_etat_processus).erreur_systeme = d_es_processus; + return; + } + (*s_etat_processus).erreur_systeme = d_es_processus; return; } - - (*s_etat_processus).erreur_systeme = d_es_processus; - return; } # ifndef SEMAPHORES_NOMMES