--- rpl/src/instructions_s9.c 2013/04/01 15:29:38 1.61 +++ rpl/src/instructions_s9.c 2013/05/21 12:10:12 1.62 @@ -1151,10 +1151,6 @@ instruction_swi(struct_processus *s_etat integer8 interruption; - pid_t pid; - - pthread_t tid; - sig_atomic_t registre; ssize_t longueur_ecriture; @@ -1163,6 +1159,7 @@ instruction_swi(struct_processus *s_etat struct timespec attente; + unsigned char caractere; unsigned char tampon; (*s_etat_processus).erreur_execution = d_ex; @@ -1231,171 +1228,6 @@ instruction_swi(struct_processus *s_etat registre = (*s_etat_processus).var_volatile_traitement_retarde_stop; (*s_etat_processus).var_volatile_traitement_retarde_stop = 1; - if ((*s_etat_processus).processus_detache == d_vrai) - { - pid = -1; - - attente.tv_sec = 0; - attente.tv_nsec = GRANULARITE_us * 1000; - -# 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((longueur_ecriture = write_atomic(s_etat_processus, - (*s_etat_processus).pipe_nombre_objets_attente, - &pid, sizeof(pid))) != sizeof(pid)) - { -# 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; - } - } - - if (longueur_ecriture == -1) - { - if (registre == 0) - { - if ((*s_etat_processus) - .var_volatile_traitement_retarde_stop == -1) - { - (*s_etat_processus).var_volatile_requete_arret = -1; - } - - (*s_etat_processus) - .var_volatile_traitement_retarde_stop - = registre; - } - - (*s_etat_processus).erreur_systeme = d_es_processus; - return; - } - - nanosleep(&attente, NULL); - INCR_GRANULARITE(attente.tv_nsec); - -# 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; - } - } - - scrutation_interruptions(s_etat_processus); - -# 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; - } - } - } - else - { - tid = (pthread_t) -1; - - attente.tv_sec = 0; - attente.tv_nsec = GRANULARITE_us * 1000; - -# 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((longueur_ecriture = write_atomic(s_etat_processus, - (*s_etat_processus).pipe_nombre_objets_attente, - &tid, sizeof(tid))) != sizeof(tid)) - { -# 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; - } - } - - if (longueur_ecriture == -1) - { - if (registre == 0) - { - if ((*s_etat_processus) - .var_volatile_traitement_retarde_stop == -1) - { - (*s_etat_processus).var_volatile_requete_arret = -1; - } - - (*s_etat_processus) - .var_volatile_traitement_retarde_stop - = registre; - } - - (*s_etat_processus).erreur_systeme = d_es_processus; - return; - } - - nanosleep(&attente, NULL); - INCR_GRANULARITE(attente.tv_nsec); - -# 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; - } - } - - scrutation_interruptions(s_etat_processus); - -# 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; - } - } - } - interruption_reduite = (int) interruption; attente.tv_sec = 0; @@ -1479,7 +1311,7 @@ instruction_swi(struct_processus *s_etat if ((*s_etat_processus).processus_detache == d_vrai) { - pid = -3; + caractere = 2; attente.tv_sec = 0; attente.tv_nsec = GRANULARITE_us * 1000; @@ -1495,8 +1327,8 @@ instruction_swi(struct_processus *s_etat } while((longueur_ecriture = write_atomic(s_etat_processus, - (*s_etat_processus).pipe_nombre_interruptions_attente, - &pid, sizeof(pid))) != sizeof(pid)) + (*s_etat_processus).pipe_nombre_elements_attente, + &caractere, sizeof(caractere))) != sizeof(caractere)) { # ifndef SEMAPHORES_NOMMES while(sem_wait(&((*s_etat_processus).semaphore_fork)) != 0) @@ -1546,61 +1378,6 @@ instruction_swi(struct_processus *s_etat scrutation_interruptions(s_etat_processus); } - pid = getpid(); - - attente.tv_sec = 0; - attente.tv_nsec = GRANULARITE_us * 1000; - - while((longueur_ecriture = write_atomic(s_etat_processus, - (*s_etat_processus).pipe_nombre_interruptions_attente, - &pid, sizeof(pid))) != sizeof(pid)) - { -# 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; - } - } - - if (longueur_ecriture == -1) - { - if (registre == 0) - { - if ((*s_etat_processus) - .var_volatile_traitement_retarde_stop == -1) - { - (*s_etat_processus).var_volatile_requete_arret = -1; - } - - (*s_etat_processus) - .var_volatile_traitement_retarde_stop - = registre; - } - - (*s_etat_processus).erreur_systeme = d_es_processus; - return; - } - - nanosleep(&attente, NULL); - INCR_GRANULARITE(attente.tv_nsec); - -# 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; - } - } - # ifndef SEMAPHORES_NOMMES while(sem_wait(&((*s_etat_processus).semaphore_fork)) != 0) # else @@ -1616,7 +1393,7 @@ instruction_swi(struct_processus *s_etat } else { - tid = (pthread_t) -3; + caractere = 2; # ifndef SEMAPHORES_NOMMES if (sem_post(&((*s_etat_processus).semaphore_fork)) != 0) @@ -1629,8 +1406,8 @@ instruction_swi(struct_processus *s_etat } while((longueur_ecriture = write_atomic(s_etat_processus, - (*s_etat_processus).pipe_nombre_interruptions_attente, - &tid, sizeof(tid))) != sizeof(tid)) + (*s_etat_processus).pipe_nombre_elements_attente, + &caractere, sizeof(caractere))) != sizeof(caractere)) { # ifndef SEMAPHORES_NOMMES while(sem_wait(&((*s_etat_processus).semaphore_fork)) != 0) @@ -1649,64 +1426,6 @@ instruction_swi(struct_processus *s_etat { if (registre == 0) { - if ((*s_etat_processus) - .var_volatile_traitement_retarde_stop == -1) - { - (*s_etat_processus).var_volatile_requete_arret = -1; - } - - (*s_etat_processus) - .var_volatile_traitement_retarde_stop - = registre; - } - - (*s_etat_processus).erreur_systeme = d_es_processus; - return; - } - - nanosleep(&attente, NULL); - INCR_GRANULARITE(attente.tv_nsec); - -# 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; - } - - scrutation_interruptions(s_etat_processus); - } - - tid = pthread_self(); - - attente.tv_sec = 0; - attente.tv_nsec = GRANULARITE_us * 1000; - - while((longueur_ecriture = write_atomic(s_etat_processus, - (*s_etat_processus).pipe_nombre_interruptions_attente, - &tid, sizeof(tid))) != sizeof(tid)) - { -# 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; - } - } - - if (longueur_ecriture == -1) - - { - if (registre == 0) - { if ((*s_etat_processus) .var_volatile_traitement_retarde_stop == -1) {