--- rpl/src/instructions_p7.c 2011/09/14 17:55:59 1.35 +++ rpl/src/instructions_p7.c 2012/05/21 17:25:44 1.45 @@ -1,7 +1,7 @@ /* ================================================================================ - RPL/2 (R) version 4.1.3 - Copyright (C) 1989-2011 Dr. BERTRAND Joël + RPL/2 (R) version 4.1.9 + Copyright (C) 1989-2012 Dr. BERTRAND Joël This file is part of RPL/2. @@ -788,8 +788,12 @@ instruction_poke(struct_processus *s_eta } } - if (pthread_mutex_unlock(&((*s_etat_processus).mutex_fork)) - != 0) +# 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; @@ -801,11 +805,20 @@ instruction_poke(struct_processus *s_eta .pipe_nombre_injections[1], "-", sizeof(unsigned char))) != sizeof(unsigned char)) { - if (pthread_mutex_lock( - &((*s_etat_processus).mutex_fork)) != 0) +# ifndef SEMAPHORES_NOMMES + while(sem_wait( + &((*s_etat_processus).semaphore_fork)) != 0) +# else + while(sem_wait( + (*s_etat_processus).semaphore_fork) != 0) +# endif { - (*s_etat_processus).erreur_systeme = d_es_processus; - return; + if (errno != EINTR) + { + (*s_etat_processus).erreur_systeme = + d_es_processus; + return; + } } if (longueur_ecriture == -1) @@ -845,8 +858,13 @@ instruction_poke(struct_processus *s_eta return; } - if (pthread_mutex_unlock( - &((*s_etat_processus).mutex_fork)) != 0) +# 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; @@ -867,11 +885,18 @@ instruction_poke(struct_processus *s_eta } } - if (pthread_mutex_lock(&((*s_etat_processus).mutex_fork)) - != 0) +# ifndef SEMAPHORES_NOMMES + while(sem_wait(&((*s_etat_processus).semaphore_fork)) + != 0) +# else + while(sem_wait((*s_etat_processus).semaphore_fork) != 0) +# endif { - (*s_etat_processus).erreur_systeme = d_es_processus; - return; + if (errno != EINTR) + { + (*s_etat_processus).erreur_systeme = d_es_processus; + return; + } } if (registre_stop == 0) @@ -1011,8 +1036,13 @@ instruction_poke(struct_processus *s_eta } } - if (pthread_mutex_unlock( - &((*s_etat_processus).mutex_fork)) != 0) +# 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; @@ -1024,11 +1054,20 @@ instruction_poke(struct_processus *s_eta .pipe_nombre_injections[1], "-", sizeof(unsigned char))) != sizeof(unsigned char)) { - if (pthread_mutex_lock( - &((*s_etat_processus).mutex_fork)) != 0) +# ifndef SEMAPHORES_NOMMES + while(sem_wait( + &((*s_etat_processus).semaphore_fork)) != 0) +# else + while(sem_wait( + (*s_etat_processus).semaphore_fork) != 0) +# endif { - (*s_etat_processus).erreur_systeme = d_es_processus; - return; + if (errno != EINTR) + { + (*s_etat_processus).erreur_systeme = + d_es_processus; + return; + } } if (longueur_ecriture == -1) @@ -1068,8 +1107,13 @@ instruction_poke(struct_processus *s_eta return; } - if (pthread_mutex_unlock( - &((*s_etat_processus).mutex_fork)) != 0) +# 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; @@ -1090,11 +1134,19 @@ instruction_poke(struct_processus *s_eta } } - if (pthread_mutex_lock( - &((*s_etat_processus).mutex_fork)) != 0) +# ifndef SEMAPHORES_NOMMES + while(sem_wait( + &((*s_etat_processus).semaphore_fork)) != 0) +# else + while(sem_wait( + (*s_etat_processus).semaphore_fork) != 0) +# endif { - (*s_etat_processus).erreur_systeme = d_es_processus; - return; + if (errno != EINTR) + { + (*s_etat_processus).erreur_systeme = d_es_processus; + return; + } } if (registre_stop == 0)