--- rpl/src/instructions_s1.c 2011/09/14 17:55:59 1.37 +++ rpl/src/instructions_s1.c 2011/09/20 14:36:29 1.41 @@ -3403,9 +3403,6 @@ instruction_syseval(struct_processus *s_ pid_t pid; - sigset_t oldset; - sigset_t set; - ssize_t longueur_ecriture; struct_liste_chainee *l_element_courant; @@ -3702,16 +3699,10 @@ instruction_syseval(struct_processus *s_ fflush(NULL); - sigfillset(&set); - pthread_sigmask(SIG_BLOCK, &set, &oldset); - verrouillage_threads_concurrents(s_etat_processus); pid = fork(); deverrouillage_threads_concurrents(s_etat_processus); - pthread_sigmask(SIG_SETMASK, &oldset, NULL); - sigpending(&set); - if (pid < 0) { if (close(pipes_entree[0]) != 0) @@ -3867,8 +3858,12 @@ instruction_syseval(struct_processus *s_ longueur_ecriture = strlen((unsigned char *) (*(*l_element_courant).donnee).objet); - 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; @@ -3879,8 +3874,13 @@ instruction_syseval(struct_processus *s_ (*(*l_element_courant).donnee).objet, longueur_ecriture) != longueur_ecriture) { - while(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; @@ -3893,8 +3893,13 @@ instruction_syseval(struct_processus *s_ 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; @@ -3904,12 +3909,20 @@ instruction_syseval(struct_processus *s_ while(write_atomic(s_etat_processus, pipes_entree[1], "\n", 1) != 1) { - 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) @@ -3918,19 +3931,31 @@ instruction_syseval(struct_processus *s_ 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; } } - 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; + } } l_element_courant = (*l_element_courant).suivant; @@ -3954,8 +3979,11 @@ instruction_syseval(struct_processus *s_ * Récupération de la valeur de retour du processus détaché */ - 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; @@ -3963,8 +3991,12 @@ instruction_syseval(struct_processus *s_ if (waitpid(pid, &status, 0) == -1) { - if (pthread_mutex_lock(&((*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; @@ -3974,10 +4006,17 @@ instruction_syseval(struct_processus *s_ return; } - 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; + } } } while((!WIFEXITED(status)) && (!WIFSIGNALED(status))); @@ -3992,7 +4031,11 @@ instruction_syseval(struct_processus *s_ 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; @@ -4002,8 +4045,11 @@ instruction_syseval(struct_processus *s_ pipes_sortie[0], &(tampon[pointeur]), longueur_lecture)) > 0) { - while(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; @@ -4022,18 +4068,28 @@ instruction_syseval(struct_processus *s_ 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; } } - 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 ((tampon = realloc(tampon, (strlen(tampon) + 1) * @@ -4175,7 +4231,11 @@ instruction_syseval(struct_processus *s_ 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; @@ -4192,10 +4252,17 @@ instruction_syseval(struct_processus *s_ &((*s_etat_processus).l_base_pile), s_objet_resultat) == d_erreur) { - 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 (close(pipes_erreur[0]) != 0) @@ -4208,10 +4275,17 @@ instruction_syseval(struct_processus *s_ return; } - 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 (close(pipes_erreur[0]) != 0)