--- rpl/src/instructions_w1.c 2011/12/02 10:43:22 1.54 +++ rpl/src/instructions_w1.c 2011/12/05 17:45:01 1.55 @@ -2753,15 +2753,72 @@ instruction_wfsock(struct_processus *s_e s_poll.events = POLLIN; s_poll.revents = 0; - while(poll(&s_poll, 1, -1) < 0) + do { - if (errno != EINTR) + drapeau = d_vrai; + +# 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_erreur_fichier; - return; + (*s_etat_processus).erreur_systeme = d_es_processus; + return; } - } + + if (poll(&s_poll, 1, -1) < 0) + { + erreur = errno; + +# ifndef SEMAPHORES_NOMMES + while(sem_wait(&((*s_etat_processus) + .semaphore_fork)) != 0) +# else + while(sem_wait((*s_etat_processus).semaphore_fork) + != 0) +# endif + + if (erreur != EINTR) + { + liberation(s_etat_processus, s_objet_argument); + liberation(s_etat_processus, s_objet_resultat); + + (*s_etat_processus).erreur_execution = + d_ex_erreur_acces_fichier; + return; + } + + scrutation_injection(s_etat_processus); + + if ((*s_etat_processus).var_volatile_requete_arret != 0) + { + drapeau = d_vrai; + } + else + { + drapeau = d_faux; + } + } + else + { +# 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; + } + } + } + } while(drapeau == d_faux); if (empilement(s_etat_processus, &((*s_etat_processus).l_base_pile), s_objet_argument) == d_erreur) @@ -2818,13 +2875,13 @@ instruction_wfsock(struct_processus *s_e { erreur = errno; -# ifndef SEMAPHORES_NOMMES - while(sem_wait(&((*s_etat_processus) - .semaphore_fork)) != 0) -# else - while(sem_wait((*s_etat_processus).semaphore_fork) - != 0) -# endif +# 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) {