--- rpl/src/instructions_w1.c 2011/09/15 17:51:43 1.48 +++ rpl/src/instructions_w1.c 2011/09/20 09:51:43 1.50 @@ -261,7 +261,7 @@ instruction_wait(struct_processus *s_eta do { - if (pthread_mutex_unlock(&((*s_etat_processus).mutex_fork)) != 0) + if (sem_post(&((*s_etat_processus).semaphore_fork)) != 0) { (*s_etat_processus).erreur_systeme = d_es_processus; return; @@ -270,10 +270,13 @@ instruction_wait(struct_processus *s_eta code_retour = nanosleep(&temporisation, &temporisation); erreur = errno; - if (pthread_mutex_lock(&((*s_etat_processus).mutex_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); @@ -1444,7 +1447,7 @@ instruction_write(struct_processus *s_et return; } - if (pthread_mutex_unlock(&((*s_etat_processus).mutex_fork)) != 0) + if (sem_post(&((*s_etat_processus).semaphore_fork)) != 0) { if (sigaction(SIGPIPE, ®istre, NULL) != 0) { @@ -1467,10 +1470,13 @@ instruction_write(struct_processus *s_et return; } - if (pthread_mutex_lock(&((*s_etat_processus).mutex_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 (pthread_mutex_lock(&((*s_etat_processus).mutex_fork)) != 0) + while(sem_wait(&((*s_etat_processus).semaphore_fork)) != 0) { if (errno != EINTR) { @@ -1537,8 +1543,7 @@ instruction_write(struct_processus *s_et adresse_unix.sun_path[UNIX_PATH_MAX - 1] = d_code_fin_chaine; - if (pthread_mutex_unlock(&((*s_etat_processus).mutex_fork)) - != 0) + if (sem_post(&((*s_etat_processus).semaphore_fork)) != 0) { (*s_etat_processus).erreur_systeme = d_es_processus; return; @@ -1551,11 +1556,13 @@ instruction_write(struct_processus *s_et { ios = errno; - if (pthread_mutex_lock(&((*s_etat_processus) - .mutex_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)) @@ -1570,10 +1577,13 @@ instruction_write(struct_processus *s_et return; } - if (pthread_mutex_lock(&((*s_etat_processus).mutex_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)) @@ -1594,8 +1604,7 @@ instruction_write(struct_processus *s_et adresse_ipv4.sin_port = htons(port); adresse_ipv4.sin_addr.s_addr = htonl(calcul_adresse); - if (pthread_mutex_unlock(&((*s_etat_processus) - .mutex_fork)) != 0) + if (sem_post(&((*s_etat_processus).semaphore_fork)) != 0) { (*s_etat_processus).erreur_systeme = d_es_processus; return; @@ -1606,11 +1615,15 @@ instruction_write(struct_processus *s_et longueur_effective, 0, (struct sockaddr *) &adresse_ipv4, sizeof(adresse_ipv4)) < 0) { - if (pthread_mutex_lock(&((*s_etat_processus) - .mutex_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; + } } (*s_etat_processus).erreur_systeme = @@ -1618,11 +1631,13 @@ instruction_write(struct_processus *s_et return; } - if (pthread_mutex_lock(&((*s_etat_processus) - .mutex_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 @@ -1657,8 +1672,7 @@ instruction_write(struct_processus *s_et adresse_ipv6.sin6_addr.s6_addr[i] = adresse[i], i++); - if (pthread_mutex_unlock(&((*s_etat_processus) - .mutex_fork)) != 0) + if (sem_post(&((*s_etat_processus).semaphore_fork)) != 0) { (*s_etat_processus).erreur_systeme = d_es_processus; return; @@ -1669,12 +1683,15 @@ instruction_write(struct_processus *s_et longueur_effective, 0, (struct sockaddr *) &adresse_ipv6, sizeof(adresse_ipv6)) < 0) { - if (pthread_mutex_lock(&((*s_etat_processus) - .mutex_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; + } } (*s_etat_processus).erreur_systeme = @@ -1682,12 +1699,14 @@ instruction_write(struct_processus *s_et return; } - if (pthread_mutex_lock(&((*s_etat_processus) - .mutex_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,16 +1903,19 @@ instruction_wflock(struct_processus *s_e return; } - if (pthread_mutex_unlock(&((*s_etat_processus).mutex_fork)) != 0) + if (sem_post(&((*s_etat_processus).semaphore_fork)) != 0) { (*s_etat_processus).erreur_systeme = d_es_processus; return; } - if (pthread_mutex_lock(&((*s_etat_processus).mutex_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) @@ -2196,8 +2218,7 @@ instruction_wfproc(struct_processus *s_e registre_instruction_valide; } - if (pthread_mutex_unlock(&((*s_etat_processus) - .mutex_fork)) != 0) + if (sem_post(&((*s_etat_processus).semaphore_fork)) != 0) { (*s_etat_processus).erreur_systeme = d_es_processus; return; @@ -2205,11 +2226,13 @@ instruction_wfproc(struct_processus *s_e nanosleep(&attente, NULL); - if (pthread_mutex_lock(&((*s_etat_processus).mutex_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,8 +2477,7 @@ instruction_wfdata(struct_processus *s_e return; } - if (pthread_mutex_unlock(&((*s_etat_processus) - .mutex_fork)) != 0) + if (sem_post(&((*s_etat_processus).semaphore_fork)) != 0) { (*s_etat_processus).erreur_systeme = d_es_processus; return; @@ -2463,11 +2485,13 @@ instruction_wfdata(struct_processus *s_e nanosleep(&attente, NULL); - if (pthread_mutex_lock(&((*s_etat_processus).mutex_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); @@ -2647,8 +2671,7 @@ instruction_wfsock(struct_processus *s_e { drapeau = d_vrai; - if (pthread_mutex_unlock(&((*s_etat_processus).mutex_fork)) - != 0) + if (sem_post(&((*s_etat_processus).semaphore_fork)) != 0) { (*s_etat_processus).erreur_systeme = d_es_processus; return; @@ -2661,11 +2684,13 @@ instruction_wfsock(struct_processus *s_e { erreur = errno; - if (pthread_mutex_lock(&((*s_etat_processus).mutex_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) @@ -2691,11 +2716,13 @@ instruction_wfsock(struct_processus *s_e } else { - if (pthread_mutex_lock(&((*s_etat_processus).mutex_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,8 +2754,7 @@ instruction_wfsock(struct_processus *s_e { drapeau = d_vrai; - if (pthread_mutex_unlock(&((*s_etat_processus).mutex_fork)) - != 0) + if (sem_post(&((*s_etat_processus).semaphore_fork)) != 0) { (*s_etat_processus).erreur_systeme = d_es_processus; return; @@ -2741,11 +2767,13 @@ instruction_wfsock(struct_processus *s_e { erreur = errno; - if (pthread_mutex_lock(&((*s_etat_processus).mutex_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) @@ -2771,11 +2799,13 @@ instruction_wfsock(struct_processus *s_e } else { - if (pthread_mutex_lock(&((*s_etat_processus).mutex_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); @@ -2826,8 +2856,7 @@ instruction_wfsock(struct_processus *s_e { drapeau = d_vrai; - if (pthread_mutex_unlock(&((*s_etat_processus).mutex_fork)) - != 0) + if (sem_post(&((*s_etat_processus).semaphore_fork)) != 0) { (*s_etat_processus).erreur_systeme = d_es_processus; return; @@ -2839,11 +2868,13 @@ instruction_wfsock(struct_processus *s_e { erreur = errno; - if (pthread_mutex_lock(&((*s_etat_processus).mutex_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) @@ -2869,11 +2900,13 @@ instruction_wfsock(struct_processus *s_e } else { - if (pthread_mutex_lock(&((*s_etat_processus).mutex_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); @@ -3153,7 +3186,7 @@ instruction_wfpoke(struct_processus *s_e do { - if (pthread_mutex_unlock(&((*s_etat_processus).mutex_fork)) != 0) + if (sem_post(&((*s_etat_processus).semaphore_fork)) != 0) { (*s_etat_processus).erreur_systeme = d_es_processus; return; @@ -3161,10 +3194,13 @@ instruction_wfpoke(struct_processus *s_e nanosleep(&attente, NULL); - if (pthread_mutex_lock(&((*s_etat_processus).mutex_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); @@ -3300,7 +3336,7 @@ instruction_wfack(struct_processus *s_et return; } - if (pthread_mutex_unlock(&((*s_etat_processus).mutex_fork)) != 0) + if (sem_post(&((*s_etat_processus).semaphore_fork)) != 0) { (*s_etat_processus).erreur_systeme = d_es_processus; return; @@ -3309,10 +3345,13 @@ instruction_wfack(struct_processus *s_et nanosleep(&attente, NULL); INCR_GRANULARITE(attente.tv_nsec); - if (pthread_mutex_lock(&((*s_etat_processus).mutex_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; + } } }