--- rpl/src/instructions_w1.c 2011/09/20 08:56:24 1.49 +++ rpl/src/instructions_w1.c 2011/09/20 09:51:43 1.50 @@ -270,10 +270,13 @@ instruction_wait(struct_processus *s_eta code_retour = nanosleep(&temporisation, &temporisation); erreur = errno; - if (sem_wait(&((*s_etat_processus).semaphore_fork)) != 0) + while(sem_wait(&((*s_etat_processus).semaphore_fork)) != 0) { - (*s_etat_processus).erreur_systeme = d_es_processus; - return; + if (errno != EINTR) + { + (*s_etat_processus).erreur_systeme = d_es_processus; + return; + } } scrutation_injection(s_etat_processus); @@ -1467,10 +1470,13 @@ instruction_write(struct_processus *s_et return; } - if (sem_wait(&((*s_etat_processus).semaphore_fork)) != 0) + while(sem_wait(&((*s_etat_processus).semaphore_fork)) != 0) { - (*s_etat_processus).erreur_systeme = d_es_processus; - return; + if (errno != EINTR) + { + (*s_etat_processus).erreur_systeme = d_es_processus; + return; + } } if ((ios == EPIPE) || (ios == ECONNRESET)) @@ -1484,7 +1490,7 @@ instruction_write(struct_processus *s_et return; } - if (sem_wait(&((*s_etat_processus).semaphore_fork)) != 0) + while(sem_wait(&((*s_etat_processus).semaphore_fork)) != 0) { if (errno != EINTR) { @@ -1550,10 +1556,13 @@ instruction_write(struct_processus *s_et { ios = errno; - if (sem_wait(&((*s_etat_processus).semaphore_fork)) != 0) + while(sem_wait(&((*s_etat_processus).semaphore_fork)) != 0) { - (*s_etat_processus).erreur_systeme = d_es_processus; - return; + if (errno != EINTR) + { + (*s_etat_processus).erreur_systeme = d_es_processus; + return; + } } if ((ios == EPIPE) || (ios == ECONNRESET)) @@ -1568,10 +1577,13 @@ instruction_write(struct_processus *s_et return; } - if (sem_wait(&((*s_etat_processus).semaphore_fork)) != 0) + while(sem_wait(&((*s_etat_processus).semaphore_fork)) != 0) { - (*s_etat_processus).erreur_systeme = d_es_processus; - return; + if (errno != EINTR) + { + (*s_etat_processus).erreur_systeme = d_es_processus; + return; + } } } else if ((*((struct_socket *) (*s_objet_argument_1).objet)) @@ -1603,11 +1615,15 @@ instruction_write(struct_processus *s_et longueur_effective, 0, (struct sockaddr *) &adresse_ipv4, sizeof(adresse_ipv4)) < 0) { - if (sem_wait(&((*s_etat_processus) + while(sem_wait(&((*s_etat_processus) .semaphore_fork)) != 0) { - (*s_etat_processus).erreur_systeme = d_es_processus; - return; + if (errno != EINTR) + { + (*s_etat_processus).erreur_systeme = + d_es_processus; + return; + } } (*s_etat_processus).erreur_systeme = @@ -1615,10 +1631,13 @@ instruction_write(struct_processus *s_et return; } - if (sem_wait(&((*s_etat_processus).semaphore_fork)) != 0) + while(sem_wait(&((*s_etat_processus).semaphore_fork)) != 0) { - (*s_etat_processus).erreur_systeme = d_es_processus; - return; + if (errno != EINTR) + { + (*s_etat_processus).erreur_systeme = d_es_processus; + return; + } } } else @@ -1664,12 +1683,15 @@ instruction_write(struct_processus *s_et longueur_effective, 0, (struct sockaddr *) &adresse_ipv6, sizeof(adresse_ipv6)) < 0) { - if (sem_wait(&((*s_etat_processus) + while(sem_wait(&((*s_etat_processus) .semaphore_fork)) != 0) { - (*s_etat_processus).erreur_systeme = - d_es_processus; - return; + if (errno != EINTR) + { + (*s_etat_processus).erreur_systeme = + d_es_processus; + return; + } } (*s_etat_processus).erreur_systeme = @@ -1677,11 +1699,14 @@ instruction_write(struct_processus *s_et return; } - if (sem_wait(&((*s_etat_processus).semaphore_fork)) != 0) + while(sem_wait(&((*s_etat_processus).semaphore_fork)) != 0) { - (*s_etat_processus).erreur_systeme = - d_es_processus; - return; + if (errno != EINTR) + { + (*s_etat_processus).erreur_systeme = + d_es_processus; + return; + } } # else if ((*s_etat_processus).langue == 'F') @@ -1884,10 +1909,13 @@ instruction_wflock(struct_processus *s_e return; } - if (sem_wait(&((*s_etat_processus).semaphore_fork)) != 0) + while(sem_wait(&((*s_etat_processus).semaphore_fork)) != 0) { - (*s_etat_processus).erreur_systeme = d_es_processus; - return; + if (errno != EINTR) + { + (*s_etat_processus).erreur_systeme = d_es_processus; + return; + } } if (lock.l_type == F_UNLCK) @@ -2198,10 +2226,13 @@ instruction_wfproc(struct_processus *s_e nanosleep(&attente, NULL); - if (sem_wait(&((*s_etat_processus).semaphore_fork)) != 0) + while(sem_wait(&((*s_etat_processus).semaphore_fork)) != 0) { - (*s_etat_processus).erreur_systeme = d_es_processus; - return; + if (errno != EINTR) + { + (*s_etat_processus).erreur_systeme = d_es_processus; + return; + } } scrutation_injection(s_etat_processus); @@ -2454,10 +2485,13 @@ instruction_wfdata(struct_processus *s_e nanosleep(&attente, NULL); - if (sem_wait(&((*s_etat_processus).semaphore_fork)) != 0) + while(sem_wait(&((*s_etat_processus).semaphore_fork)) != 0) { - (*s_etat_processus).erreur_systeme = d_es_processus; - return; + if (errno != EINTR) + { + (*s_etat_processus).erreur_systeme = d_es_processus; + return; + } } scrutation_injection(s_etat_processus); @@ -2650,10 +2684,13 @@ instruction_wfsock(struct_processus *s_e { erreur = errno; - if (sem_wait(&((*s_etat_processus).semaphore_fork)) != 0) + while(sem_wait(&((*s_etat_processus).semaphore_fork)) != 0) { - (*s_etat_processus).erreur_systeme = d_es_processus; - return; + if (errno != EINTR) + { + (*s_etat_processus).erreur_systeme = d_es_processus; + return; + } } if (erreur != EINTR) @@ -2679,10 +2716,13 @@ instruction_wfsock(struct_processus *s_e } else { - if (sem_wait(&((*s_etat_processus).semaphore_fork)) != 0) + while(sem_wait(&((*s_etat_processus).semaphore_fork)) != 0) { - (*s_etat_processus).erreur_systeme = d_es_processus; - return; + if (errno != EINTR) + { + (*s_etat_processus).erreur_systeme = d_es_processus; + return; + } } } } while(drapeau == d_faux); @@ -2727,10 +2767,13 @@ instruction_wfsock(struct_processus *s_e { erreur = errno; - if (sem_wait(&((*s_etat_processus).semaphore_fork)) != 0) + while(sem_wait(&((*s_etat_processus).semaphore_fork)) != 0) { - (*s_etat_processus).erreur_systeme = d_es_processus; - return; + if (errno != EINTR) + { + (*s_etat_processus).erreur_systeme = d_es_processus; + return; + } } if (erreur != EINTR) @@ -2756,11 +2799,13 @@ instruction_wfsock(struct_processus *s_e } else { - if (sem_wait(&((*s_etat_processus).semaphore_fork)) - != 0) + while(sem_wait(&((*s_etat_processus).semaphore_fork)) != 0) { - (*s_etat_processus).erreur_systeme = d_es_processus; - return; + if (errno != EINTR) + { + (*s_etat_processus).erreur_systeme = d_es_processus; + return; + } } } } while(drapeau == d_faux); @@ -2823,10 +2868,13 @@ instruction_wfsock(struct_processus *s_e { erreur = errno; - if (sem_wait(&((*s_etat_processus).semaphore_fork)) != 0) + while(sem_wait(&((*s_etat_processus).semaphore_fork)) != 0) { - (*s_etat_processus).erreur_systeme = d_es_processus; - return; + if (errno != EINTR) + { + (*s_etat_processus).erreur_systeme = d_es_processus; + return; + } } if (erreur != EINTR) @@ -2852,10 +2900,13 @@ instruction_wfsock(struct_processus *s_e } else { - if (sem_wait(&((*s_etat_processus).semaphore_fork)) != 0) + while(sem_wait(&((*s_etat_processus).semaphore_fork)) != 0) { - (*s_etat_processus).erreur_systeme = d_es_processus; - return; + if (errno != EINTR) + { + (*s_etat_processus).erreur_systeme = d_es_processus; + return; + } } } } while(drapeau == d_faux); @@ -3143,10 +3194,13 @@ instruction_wfpoke(struct_processus *s_e nanosleep(&attente, NULL); - if (sem_wait(&((*s_etat_processus).semaphore_fork)) != 0) + while(sem_wait(&((*s_etat_processus).semaphore_fork)) != 0) { - (*s_etat_processus).erreur_systeme = d_es_processus; - return; + if (errno != EINTR) + { + (*s_etat_processus).erreur_systeme = d_es_processus; + return; + } } scrutation_injection(s_etat_processus); @@ -3291,10 +3345,13 @@ instruction_wfack(struct_processus *s_et nanosleep(&attente, NULL); INCR_GRANULARITE(attente.tv_nsec); - if (sem_wait(&((*s_etat_processus).semaphore_fork)) != 0) + while(sem_wait(&((*s_etat_processus).semaphore_fork)) != 0) { - (*s_etat_processus).erreur_systeme = d_es_processus; - return; + if (errno != EINTR) + { + (*s_etat_processus).erreur_systeme = d_es_processus; + return; + } } }