--- rpl/src/instructions_s1.c 2019/01/01 09:03:09 1.93 +++ rpl/src/instructions_s1.c 2019/01/28 15:34:25 1.94 @@ -3967,63 +3967,7 @@ instruction_syseval(struct_processus *s_ return; } - do - { - if (kill(pid, 0) != 0) - { - break; - } - - /* - * Récupération de la valeur de retour du processus détaché - */ - -# 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; - } - - while(waitpid(pid, &status, 0) == -1) - { - if (errno != EINTR) - { -# 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; - } - - (*s_etat_processus).erreur_systeme = d_es_processus; - return; - } - } - -# 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((!WIFEXITED(status)) && (!WIFSIGNALED(status))); - - longueur_lecture = 256; + longueur_lecture = 65536; pointeur = 0; nombre_iterations = 1; @@ -4061,7 +4005,7 @@ instruction_syseval(struct_processus *s_ } tampon[pointeur + ios] = d_code_fin_chaine; - pointeur += longueur_lecture; + pointeur += ios; nombre_iterations++; if ((tampon = realloc(tampon, @@ -4084,6 +4028,62 @@ instruction_syseval(struct_processus *s_ } } + do + { + if (kill(pid, 0) != 0) + { + break; + } + + /* + * Récupération de la valeur de retour du processus détaché + */ + +# 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; + } + + while(waitpid(pid, &status, 0) == -1) + { + if (errno != EINTR) + { +# 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; + } + + (*s_etat_processus).erreur_systeme = d_es_processus; + return; + } + } + +# 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((!WIFEXITED(status)) && (!WIFSIGNALED(status))); + # ifndef SEMAPHORES_NOMMES while(sem_wait(&((*s_etat_processus).semaphore_fork)) != 0) # else