--- rpl/src/instructions_r4.c 2012/08/22 10:47:17 1.61 +++ rpl/src/instructions_r4.c 2012/09/10 15:53:20 1.62 @@ -2427,7 +2427,11 @@ printf("L=%d\n", longueur_enregistrement if ((*s_etat_processus).var_volatile_requete_arret == -1) { - longueur_effective += ios; + if (ios >= 0) + { + longueur_effective += ios; + } + break; } @@ -2522,8 +2526,7 @@ printf("L=%d\n", longueur_enregistrement - ancienne_longueur_effective, MSG_DONTWAIT, (struct sockaddr *) &adresse_unix, &longueur_adresse); - } - while((ios == -1) && (errno == EINTR)); + } while((ios == -1) && (errno == EINTR)); } else if ((*((struct_socket *) (*s_objet_argument_1) .objet)).domaine == PF_INET) @@ -2538,8 +2541,7 @@ printf("L=%d\n", longueur_enregistrement - ancienne_longueur_effective, MSG_DONTWAIT, (struct sockaddr *) &adresse_ipv4, &longueur_adresse); - } - while((ios == -1) && (errno == EINTR)); + } while((ios == -1) && (errno == EINTR)); } else if ((*((struct_socket *) (*s_objet_argument_1) .objet)) .domaine == PF_INET6) @@ -2555,8 +2557,7 @@ printf("L=%d\n", longueur_enregistrement - ancienne_longueur_effective, MSG_DONTWAIT, (struct sockaddr *) &adresse_ipv6, &longueur_adresse); - } - while((ios == -1) && (errno == EINTR)); + } while((ios == -1) && (errno == EINTR)); # else if ((*s_etat_processus).langue == 'F') { @@ -2579,7 +2580,7 @@ printf("L=%d\n", longueur_enregistrement (*s_objet_argument_1).objet)).socket; poll_fd.events = POLLIN; - while((ios = poll(&poll_fd, 1, 100)) <= 0) + while((ios = poll(&poll_fd, 1, 60000)) <= 0) { // La fin de la trame n'est pas atteinte // et il reste quelque chose à lire. @@ -2588,6 +2589,15 @@ printf("L=%d\n", longueur_enregistrement { case EINTR: { + if ((*s_etat_processus) + .var_volatile_requete_arret == -1) + { + liberation(s_etat_processus, + s_objet_argument_1); + free(tampon_lecture); + return; + } + break; }