--- rpl/src/instructions_p7.c 2019/02/11 09:45:51 1.80 +++ rpl/src/instructions_p7.c 2019/02/12 14:38:43 1.81 @@ -752,6 +752,17 @@ instruction_poke(struct_processus *s_eta action.sa_handler = SIG_IGN; action.sa_flags = 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; + } + if (pthread_mutex_lock(&mutex_sigaction) != 0) { (*s_etat_processus).erreur_systeme = d_es_processus; @@ -799,44 +810,12 @@ instruction_poke(struct_processus *s_eta } } - /* -# ifndef SEMAPHORES_NOMMES - if (sem_post(&((*s_etat_processus).semaphore_fork)) - != 0) -# else - if (sem_post((*s_etat_processus).semaphore_fork) != 0) -# endif - { - pthread_mutex_unlock(&mutex_sigaction); - (*s_etat_processus).erreur_systeme = d_es_processus; - return; - } - */ - while((longueur_ecriture = write_atomic(s_etat_processus, (*(*((struct_processus_fils *) (*(*l_element_courant).donnee).objet)).thread) .pipe_nombre_injections[1], "-", sizeof(unsigned char))) != sizeof(unsigned char)) { - /* -# ifndef SEMAPHORES_NOMMES - while(sem_wait( - &((*s_etat_processus).semaphore_fork)) != 0) -# else - while(sem_wait( - (*s_etat_processus).semaphore_fork) != 0) -# endif - { - if (errno != EINTR) - { - (*s_etat_processus).erreur_systeme = - d_es_processus; - return; - } - } - */ - if (longueur_ecriture == -1) { pthread_mutex_unlock(&mutex_sigaction); @@ -876,20 +855,6 @@ instruction_poke(struct_processus *s_eta return; } - - /* -# 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; - } - */ } if (ecriture_pipe(s_etat_processus, @@ -906,22 +871,6 @@ instruction_poke(struct_processus *s_eta } } - /* -# ifndef SEMAPHORES_NOMMES - while(sem_wait(&((*s_etat_processus).semaphore_fork)) - != 0) -# else - while(sem_wait((*s_etat_processus).semaphore_fork) != 0) -# endif - { - if (errno != EINTR) - { - (*s_etat_processus).erreur_systeme = d_es_processus; - return; - } - } - */ - if (registre_stop == 0) { if ((*s_etat_processus) @@ -956,6 +905,20 @@ instruction_poke(struct_processus *s_eta return; } +# ifndef SEMAPHORES_NOMMES + while(sem_wait(&((*s_etat_processus).semaphore_fork)) + != 0) +# else + while(sem_wait((*s_etat_processus).semaphore_fork) != 0) +# endif + { + if (errno != EINTR) + { + (*s_etat_processus).erreur_systeme = d_es_processus; + return; + } + } + break; } } @@ -982,8 +945,35 @@ instruction_poke(struct_processus *s_eta // de lecteur et on peut se prendre un SIGPIPE dans la // figure ! +# 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; + } + if (pthread_mutex_lock(&mutex_sigaction) != 0) { +# ifndef SEMAPHORES_NOMMES + while(sem_wait(&((*s_etat_processus) + .semaphore_fork)) != 0) +# else + while(sem_wait((*s_etat_processus) + .semaphore_fork) != 0) +# endif + { + if (errno != EINTR) + { + (*s_etat_processus).erreur_systeme = + d_es_processus; + return; + } + } + (*s_etat_processus).erreur_systeme = d_es_processus; return; } @@ -993,6 +983,22 @@ instruction_poke(struct_processus *s_eta if (sigaction(SIGPIPE, &action, ®istre) != 0) { +# ifndef SEMAPHORES_NOMMES + while(sem_wait(&((*s_etat_processus) + .semaphore_fork)) != 0) +# else + while(sem_wait((*s_etat_processus) + .semaphore_fork) != 0) +# endif + { + if (errno != EINTR) + { + (*s_etat_processus).erreur_systeme = + d_es_processus; + return; + } + } + pthread_mutex_unlock(&mutex_sigaction); pthread_mutex_unlock(&((*s_etat_processus) .mutex_pile_processus)); @@ -1009,6 +1015,22 @@ instruction_poke(struct_processus *s_eta (*(*l_element_courant).donnee).objet)).thread) .mutex)) != 0) { +# ifndef SEMAPHORES_NOMMES + while(sem_wait(&((*s_etat_processus) + .semaphore_fork)) != 0) +# else + while(sem_wait((*s_etat_processus) + .semaphore_fork) != 0) +# endif + { + if (errno != EINTR) + { + (*s_etat_processus).erreur_systeme = + d_es_processus; + return; + } + } + pthread_mutex_unlock(&mutex_sigaction); (*s_etat_processus).erreur_systeme = d_es_processus; return; @@ -1030,6 +1052,22 @@ instruction_poke(struct_processus *s_eta (*(*l_element_courant).donnee).objet)) .thread).mutex)) != 0) { +# ifndef SEMAPHORES_NOMMES + while(sem_wait(&((*s_etat_processus) + .semaphore_fork)) != 0) +# else + while(sem_wait((*s_etat_processus) + .semaphore_fork) != 0) +# endif + { + if (errno != EINTR) + { + (*s_etat_processus).erreur_systeme = + d_es_processus; + return; + } + } + pthread_mutex_unlock(&mutex_sigaction); (*s_etat_processus).erreur_systeme = d_es_processus; @@ -1046,6 +1084,22 @@ instruction_poke(struct_processus *s_eta (*(*l_element_courant).donnee).objet)) .thread).mutex)) != 0) { +# ifndef SEMAPHORES_NOMMES + while(sem_wait(&((*s_etat_processus) + .semaphore_fork)) != 0) +# else + while(sem_wait((*s_etat_processus) + .semaphore_fork) != 0) +# endif + { + if (errno != EINTR) + { + (*s_etat_processus).erreur_systeme = + d_es_processus; + return; + } + } + pthread_mutex_unlock(&mutex_sigaction); (*s_etat_processus).erreur_systeme = d_es_processus; return; @@ -1058,6 +1112,22 @@ instruction_poke(struct_processus *s_eta (*(*l_element_courant).donnee).objet)).thread) .mutex)) != 0) { +# ifndef SEMAPHORES_NOMMES + while(sem_wait(&((*s_etat_processus) + .semaphore_fork)) != 0) +# else + while(sem_wait((*s_etat_processus) + .semaphore_fork) != 0) +# endif + { + if (errno != EINTR) + { + (*s_etat_processus).erreur_systeme = + d_es_processus; + return; + } + } + pthread_mutex_unlock(&mutex_sigaction); (*s_etat_processus).erreur_systeme = d_es_processus; return; @@ -1075,6 +1145,22 @@ instruction_poke(struct_processus *s_eta if ((*s_etat_processus).erreur_systeme != d_es) { +# ifndef SEMAPHORES_NOMMES + while(sem_wait(&((*s_etat_processus) + .semaphore_fork)) != 0) +# else + while(sem_wait((*s_etat_processus) + .semaphore_fork) != 0) +# endif + { + if (errno != EINTR) + { + (*s_etat_processus).erreur_systeme = + d_es_processus; + return; + } + } + pthread_mutex_unlock(&mutex_sigaction); pthread_mutex_unlock(&((*s_etat_processus) .mutex_pile_processus)); @@ -1082,44 +1168,12 @@ instruction_poke(struct_processus *s_eta } } - /* -# 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; - } - */ - while((longueur_ecriture = write_atomic(s_etat_processus, (*(*((struct_processus_fils *) (*(*l_element_courant).donnee).objet)).thread) .pipe_nombre_injections[1], "-", sizeof(unsigned char))) != sizeof(unsigned char)) { - /* -# ifndef SEMAPHORES_NOMMES - while(sem_wait( - &((*s_etat_processus).semaphore_fork)) != 0) -# else - while(sem_wait( - (*s_etat_processus).semaphore_fork) != 0) -# endif - { - if (errno != EINTR) - { - (*s_etat_processus).erreur_systeme = - d_es_processus; - return; - } - } - */ - if (longueur_ecriture == -1) { pthread_mutex_unlock(&((*s_etat_processus) @@ -1150,29 +1204,47 @@ instruction_poke(struct_processus *s_eta if (sigaction(SIGPIPE, ®istre, NULL) != 0) { +# ifndef SEMAPHORES_NOMMES + while(sem_wait(&((*s_etat_processus) + .semaphore_fork)) != 0) +# else + while(sem_wait((*s_etat_processus) + .semaphore_fork) != 0) +# endif + { + if (errno != EINTR) + { + (*s_etat_processus).erreur_systeme = + d_es_processus; + return; + } + } + pthread_mutex_unlock(&mutex_sigaction); (*s_etat_processus).erreur_systeme = d_es_signal; return; } - pthread_mutex_unlock(&mutex_sigaction); - return; - } +# ifndef SEMAPHORES_NOMMES + while(sem_wait(&((*s_etat_processus) + .semaphore_fork)) != 0) +# else + while(sem_wait((*s_etat_processus) + .semaphore_fork) != 0) +# endif + { + if (errno != EINTR) + { + (*s_etat_processus).erreur_systeme = + d_es_processus; + return; + } + } - /* -# 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; + pthread_mutex_unlock(&mutex_sigaction); return; } - */ } if (ecriture_pipe(s_etat_processus, @@ -1189,23 +1261,6 @@ instruction_poke(struct_processus *s_eta } } - /* -# ifndef SEMAPHORES_NOMMES - while(sem_wait( - &((*s_etat_processus).semaphore_fork)) != 0) -# else - while(sem_wait( - (*s_etat_processus).semaphore_fork) != 0) -# endif - { - if (errno != EINTR) - { - (*s_etat_processus).erreur_systeme = d_es_processus; - return; - } - } - */ - if (registre_stop == 0) { if ((*s_etat_processus) @@ -1226,6 +1281,22 @@ instruction_poke(struct_processus *s_eta if (sigaction(SIGPIPE, ®istre, NULL) != 0) { +# ifndef SEMAPHORES_NOMMES + while(sem_wait(&((*s_etat_processus) + .semaphore_fork)) != 0) +# else + while(sem_wait((*s_etat_processus) + .semaphore_fork) != 0) +# endif + { + if (errno != EINTR) + { + (*s_etat_processus).erreur_systeme = + d_es_processus; + return; + } + } + pthread_mutex_unlock(&mutex_sigaction); pthread_mutex_unlock(&((*s_etat_processus) .mutex_pile_processus)); @@ -1236,10 +1307,40 @@ instruction_poke(struct_processus *s_eta if (pthread_mutex_unlock(&mutex_sigaction) != 0) { +# ifndef SEMAPHORES_NOMMES + while(sem_wait(&((*s_etat_processus) + .semaphore_fork)) != 0) +# else + while(sem_wait((*s_etat_processus) + .semaphore_fork) != 0) +# endif + { + if (errno != EINTR) + { + (*s_etat_processus).erreur_systeme = + d_es_processus; + return; + } + } + (*s_etat_processus).erreur_systeme = d_es_processus; return; } +# ifndef SEMAPHORES_NOMMES + while(sem_wait(&((*s_etat_processus).semaphore_fork)) + != 0) +# else + while(sem_wait((*s_etat_processus).semaphore_fork) != 0) +# endif + { + if (errno != EINTR) + { + (*s_etat_processus).erreur_systeme = d_es_processus; + return; + } + } + break; } }