--- rpl/src/instructions_s9.c 2010/04/21 13:45:49 1.9 +++ rpl/src/instructions_s9.c 2013/02/27 17:11:44 1.59 @@ -1,7 +1,7 @@ /* ================================================================================ - RPL/2 (R) version 4.0.15 - Copyright (C) 1989-2010 Dr. BERTRAND Joël + RPL/2 (R) version 4.1.13 + Copyright (C) 1989-2013 Dr. BERTRAND Joël This file is part of RPL/2. @@ -20,7 +20,7 @@ */ -#include "rpl.conv.h" +#include "rpl-conv.h" /* @@ -57,6 +57,7 @@ instruction_sort(struct_processus *s_eta struct_objet *s_objet_copie; struct_objet *s_objet_critere; struct_objet *s_objet_liste; + struct_objet *s_objet_registre; struct_objet *s_objet_test; signed long indice_i; @@ -140,8 +141,8 @@ instruction_sort(struct_processus *s_eta return; } - if ((*s_etat_processus).s_liste_variables[(*s_etat_processus) - .position_variable_courante].variable_verrouillee == d_vrai) + if ((*(*s_etat_processus).pointeur_variable_courante) + .variable_verrouillee == d_vrai) { (*s_etat_processus).erreur_execution = d_ex_variable_verrouillee; @@ -151,32 +152,14 @@ instruction_sort(struct_processus *s_eta return; } - if ((*s_etat_processus).s_liste_variables[(*s_etat_processus) - .position_variable_courante].objet == NULL) + if ((*(*s_etat_processus).pointeur_variable_courante).objet == NULL) { - if (pthread_mutex_lock(&((*(*s_etat_processus) - .s_liste_variables_partagees).mutex)) != 0) - { - (*s_etat_processus).erreur_systeme = d_es_processus; - return; - } - if (recherche_variable_partagee(s_etat_processus, - (*s_etat_processus).s_liste_variables - [(*s_etat_processus).position_variable_courante].nom, - (*s_etat_processus).s_liste_variables - [(*s_etat_processus).position_variable_courante] - .variable_partagee, (*s_etat_processus).s_liste_variables - [(*s_etat_processus).position_variable_courante].origine) - == d_faux) + (*(*s_etat_processus).pointeur_variable_courante).nom, + (*(*s_etat_processus).pointeur_variable_courante) + .variable_partagee, (*(*s_etat_processus) + .pointeur_variable_courante).origine) == NULL) { - if (pthread_mutex_unlock(&((*(*s_etat_processus) - .s_liste_variables_partagees).mutex)) != 0) - { - (*s_etat_processus).erreur_systeme = d_es_processus; - return; - } - (*s_etat_processus).erreur_execution = d_ex_erreur_type_argument; @@ -186,15 +169,12 @@ instruction_sort(struct_processus *s_eta return; } - if (((*(*(*s_etat_processus).s_liste_variables_partagees) - .table[(*(*s_etat_processus).s_liste_variables_partagees) - .position_variable].objet).type != LST) && - ((*(*(*s_etat_processus).s_liste_variables_partagees) - .table[(*(*s_etat_processus).s_liste_variables_partagees) - .position_variable].objet).type != TBL)) + if (((*(*(*s_etat_processus).pointeur_variable_partagee_courante) + .objet).type != LST) && ((*(*(*s_etat_processus) + .pointeur_variable_partagee_courante).objet).type != TBL)) { if (pthread_mutex_unlock(&((*(*s_etat_processus) - .s_liste_variables_partagees).mutex)) != 0) + .pointeur_variable_partagee_courante).mutex)) != 0) { (*s_etat_processus).erreur_systeme = d_es_processus; return; @@ -211,15 +191,14 @@ instruction_sort(struct_processus *s_eta liberation(s_etat_processus, s_objet_liste); - s_objet_liste = (*(*s_etat_processus).s_liste_variables_partagees) - .table[(*(*s_etat_processus).s_liste_variables_partagees) - .position_variable].objet; + s_objet_liste = (*(*s_etat_processus) + .pointeur_variable_partagee_courante).objet; if ((s_objet_copie = copie_objet(s_etat_processus, s_objet_liste, 'N')) == NULL) { if (pthread_mutex_unlock(&((*(*s_etat_processus) - .s_liste_variables_partagees).mutex)) != 0) + .pointeur_variable_partagee_courante).mutex)) != 0) { (*s_etat_processus).erreur_systeme = d_es_processus; return; @@ -233,12 +212,9 @@ instruction_sort(struct_processus *s_eta } else { - if (((*(*s_etat_processus).s_liste_variables - [(*s_etat_processus).position_variable_courante].objet) - .type != LST) && - ((*(*s_etat_processus).s_liste_variables - [(*s_etat_processus).position_variable_courante].objet) - .type != TBL)) + if (((*(*(*s_etat_processus).pointeur_variable_courante).objet) + .type != LST) && ((*(*(*s_etat_processus) + .pointeur_variable_courante).objet).type != TBL)) { (*s_etat_processus).erreur_execution = d_ex_erreur_type_argument; @@ -251,8 +227,8 @@ instruction_sort(struct_processus *s_eta liberation(s_etat_processus, s_objet_liste); - s_objet_liste = (*s_etat_processus).s_liste_variables - [(*s_etat_processus).position_variable_courante].objet; + s_objet_liste = (*(*s_etat_processus).pointeur_variable_courante) + .objet; if ((s_objet_copie = copie_objet(s_etat_processus, s_objet_liste, 'N')) == NULL) @@ -264,10 +240,7 @@ instruction_sort(struct_processus *s_eta liberation(s_etat_processus, s_objet_liste); s_objet_liste = s_objet_copie; - - (*s_etat_processus).s_liste_variables[(*s_etat_processus) - .position_variable_courante].objet = s_objet_liste; - + (*(*s_etat_processus).pointeur_variable_courante).objet = s_objet_liste; presence_nom = d_vrai; } else @@ -463,7 +436,6 @@ instruction_sort(struct_processus *s_eta indice_j = 0; indice_k = (*((struct_tableau *) (*s_objet_liste).objet)) .nombre_elements - ecartement; - terminaison_boucle_2 = d_faux; do @@ -557,12 +529,17 @@ instruction_sort(struct_processus *s_eta if (condition == d_faux) { - swap((void *) (*((struct_tableau *) - (*s_objet_liste).objet)).elements - [indice_i - 1], (void *) - (*((struct_tableau *) (*s_objet_liste) - .objet)).elements[indice_l - 1], - sizeof(struct_objet)); + s_objet_registre = + (*((struct_tableau *) + (*s_objet_liste).objet)).elements + [indice_i - 1]; + (*((struct_tableau *) (*s_objet_liste).objet)) + .elements[indice_i - 1] = + (*((struct_tableau *) (*s_objet_liste) + .objet)).elements[indice_l - 1]; + (*((struct_tableau *) (*s_objet_liste) + .objet)).elements[indice_l - 1] = + s_objet_registre; indice_i -= ecartement; @@ -599,7 +576,7 @@ instruction_sort(struct_processus *s_eta else { if (pthread_mutex_unlock(&((*(*s_etat_processus) - .s_liste_variables_partagees).mutex)) != 0) + .pointeur_variable_partagee_courante).mutex)) != 0) { (*s_etat_processus).erreur_systeme = d_es_processus; return; @@ -624,12 +601,11 @@ instruction_sort(struct_processus *s_eta { if (variable_partagee == d_vrai) { - (*(*s_etat_processus).s_liste_variables_partagees) - .table[(*(*s_etat_processus).s_liste_variables_partagees) - .position_variable].objet = s_objet_liste; + (*(*s_etat_processus).pointeur_variable_partagee_courante).objet = + s_objet_liste; if (pthread_mutex_unlock(&((*(*s_etat_processus) - .s_liste_variables_partagees).mutex)) != 0) + .pointeur_variable_partagee_courante).mutex)) != 0) { (*s_etat_processus).erreur_systeme = d_es_processus; return; @@ -658,10 +634,6 @@ instruction_sort(struct_processus *s_eta void instruction_save(struct_processus *s_etat_processus) { - logical1 presence_variable; - - long i; - struct_objet *s_objet_1; struct_objet *s_objet_2; @@ -733,134 +705,35 @@ instruction_save(struct_processus *s_eta return; } - if (recherche_variable(s_etat_processus, (*((struct_nom *) + if (recherche_variable_globale(s_etat_processus, (*((struct_nom *) (*s_objet_1).objet)).nom) == d_vrai) { /* - * Une variable est accessible directement. + * Une variable est accessible. */ - if ((*s_etat_processus).s_liste_variables[(*s_etat_processus) - .position_variable_courante].niveau == 1) + if ((*(*s_etat_processus).pointeur_variable_courante) + .variable_verrouillee == d_vrai) { - // La variable accessible directement est une variable globale. - - if ((*s_etat_processus).s_liste_variables[(*s_etat_processus) - .position_variable_courante].variable_verrouillee == d_vrai) - { - liberation(s_etat_processus, s_objet_1); - liberation(s_etat_processus, s_objet_2); - - (*s_etat_processus).erreur_execution = - d_ex_variable_verrouillee; - return; - } + liberation(s_etat_processus, s_objet_1); + liberation(s_etat_processus, s_objet_2); - if ((*s_etat_processus).s_liste_variables[(*s_etat_processus) - .position_variable_courante].objet == NULL) - { - liberation(s_etat_processus, s_objet_1); - liberation(s_etat_processus, s_objet_2); - - (*s_etat_processus).erreur_execution = d_ex_variable_partagee; - return; - } - - liberation(s_etat_processus, - (*s_etat_processus).s_liste_variables[(*s_etat_processus) - .position_variable_courante].objet); - - (*s_etat_processus).s_liste_variables[(*s_etat_processus) - .position_variable_courante].objet = s_objet_2; + (*s_etat_processus).erreur_execution = d_ex_variable_verrouillee; + return; } - else - { - // On cherche une variable globale de même nom. - - i = (*s_etat_processus).position_variable_courante; - presence_variable = d_faux; - - while(i >= 0) - { - if ((strcmp((*s_etat_processus).s_liste_variables[i].nom, - (*((struct_nom *) (*s_objet_1).objet)).nom) == 0) && - ((*s_etat_processus).s_liste_variables[i].niveau == 1)) - { - presence_variable = d_vrai; - break; - } - - i--; - } - - (*s_etat_processus).position_variable_courante = i; - - if ((*s_etat_processus).s_liste_variables[(*s_etat_processus) - .position_variable_courante].niveau == 1) - { - // On a trouvé une variable globale correspondant au nom et - // que l'on modifie. - - if ((*s_etat_processus).s_liste_variables[(*s_etat_processus) - .position_variable_courante].variable_verrouillee == - d_vrai) - { - liberation(s_etat_processus, s_objet_1); - liberation(s_etat_processus, s_objet_2); - - (*s_etat_processus).erreur_execution = - d_ex_variable_verrouillee; - return; - } - - if ((*s_etat_processus).s_liste_variables[(*s_etat_processus) - .position_variable_courante].objet == NULL) - { - liberation(s_etat_processus, s_objet_1); - liberation(s_etat_processus, s_objet_2); - - (*s_etat_processus).erreur_execution = - d_ex_variable_partagee; - return; - } - - liberation(s_etat_processus, - (*s_etat_processus).s_liste_variables - [(*s_etat_processus).position_variable_courante].objet); - - (*s_etat_processus).s_liste_variables[(*s_etat_processus) - .position_variable_courante].objet = s_objet_2; - } - else - { - if ((s_variable.nom = malloc((strlen((*((struct_nom *) - (*s_objet_1).objet)).nom) + 1) * sizeof(unsigned char))) - == NULL) - { - (*s_etat_processus).erreur_systeme = - d_es_allocation_memoire; - return; - } - - strcpy(s_variable.nom, (*((struct_nom *) - (*s_objet_1).objet)).nom); - s_variable.niveau = 1; - - /* - * Le niveau 0 correspond aux définitions. Les variables - * commencent à 1 car elles sont toujours incluses dans - * une définition. - */ - s_variable.objet = s_objet_2; + if ((*(*s_etat_processus).pointeur_variable_courante).objet == NULL) + { + liberation(s_etat_processus, s_objet_1); + liberation(s_etat_processus, s_objet_2); - if (creation_variable(s_etat_processus, &s_variable, 'V', 'P') - == d_erreur) - { - return; - } - } + (*s_etat_processus).erreur_execution = d_ex_variable_partagee; + return; } + + liberation(s_etat_processus, + (*(*s_etat_processus).pointeur_variable_courante).objet); + (*(*s_etat_processus).pointeur_variable_courante).objet = s_objet_2; } else { @@ -868,6 +741,18 @@ instruction_save(struct_processus *s_eta * Aucune variable n'est accessible (ni locale, ni globale). */ + if (((*s_etat_processus).autorisation_nom_implicite == 'N') && + ((*((struct_nom *) (*s_objet_1).objet)).symbole == d_faux)) + { + liberation(s_etat_processus, s_objet_1); + liberation(s_etat_processus, s_objet_2); + + (*s_etat_processus).erreur_systeme = d_es; + (*s_etat_processus).erreur_execution = + d_ex_creation_variable_globale; + return; + } + if ((s_variable.nom = malloc((strlen((*((struct_nom *) (*s_objet_1).objet)).nom) + 1) * sizeof(unsigned char))) == NULL) @@ -917,7 +802,7 @@ instruction_save(struct_processus *s_eta void instruction_suspend(struct_processus *s_etat_processus) { - sigset_t masque; + struct timespec attente; (*s_etat_processus).erreur_execution = d_ex; @@ -927,12 +812,12 @@ instruction_suspend(struct_processus *s_ if ((*s_etat_processus).langue == 'F') { - printf("(attend un signal SIGCONT)\n\n"); + printf("(attend un signal RPL/SIGCONT)\n\n"); printf(" Aucun argument\n"); } else { - printf("(wait for SIGCONT signal)\n\n"); + printf("(wait for RPL/SIGCONT signal)\n\n"); printf(" No argument\n"); } @@ -952,36 +837,6 @@ instruction_suspend(struct_processus *s_ } } - if (sigfillset(&masque) != 0) - { - (*s_etat_processus).erreur_systeme = d_es_processus; - return; - } - - if (sigdelset(&masque, SIGCONT) != 0) - { - (*s_etat_processus).erreur_systeme = d_es_processus; - return; - } - - if (sigdelset(&masque, SIGFSTOP) != 0) - { - (*s_etat_processus).erreur_systeme = d_es_processus; - return; - } - - if (sigdelset(&masque, SIGURG) != 0) - { - (*s_etat_processus).erreur_systeme = d_es_processus; - return; - } - - if (sigdelset(&masque, SIGALRM) != 0) - { - (*s_etat_processus).erreur_systeme = d_es_processus; - return; - } - if ((*s_etat_processus).profilage == d_vrai) { profilage(s_etat_processus, "Suspend"); @@ -993,25 +848,32 @@ instruction_suspend(struct_processus *s_ } # ifndef SEMAPHORES_NOMMES - if (sem_post(&((*s_etat_processus).semaphore_fork)) != 0) - { - (*s_etat_processus).erreur_systeme = d_es_processus; - return; - } + if (sem_post(&((*s_etat_processus).semaphore_fork)) != 0) # else - if (sem_post((*s_etat_processus).semaphore_fork) != 0) + if (sem_post((*s_etat_processus).semaphore_fork) != 0) +# endif { (*s_etat_processus).erreur_systeme = d_es_processus; return; } -# endif - sigsuspend(&masque); + for((*s_etat_processus).redemarrage_processus = d_faux;;) + { + scrutation_interruptions(s_etat_processus); + + if ((*s_etat_processus).redemarrage_processus == d_vrai) + { + break; + } + + nanosleep(&attente, NULL); + INCR_GRANULARITE(attente.tv_nsec); + } # ifndef SEMAPHORES_NOMMES - while(sem_wait(&((*s_etat_processus).semaphore_fork)) == -1) + while(sem_wait(&((*s_etat_processus).semaphore_fork)) != 0) # else - while(sem_wait((*s_etat_processus).semaphore_fork) == -1) + while(sem_wait((*s_etat_processus).semaphore_fork) != 0) # endif { if (errno != EINTR) @@ -1378,27 +1240,23 @@ instruction_swi(struct_processus *s_etat attente.tv_nsec = GRANULARITE_us * 1000; # ifndef SEMAPHORES_NOMMES - if (sem_post(&((*s_etat_processus).semaphore_fork)) != 0) - { - (*s_etat_processus).erreur_systeme = d_es_processus; - return; - } + if (sem_post(&((*s_etat_processus).semaphore_fork)) != 0) # else - if (sem_post((*s_etat_processus).semaphore_fork) != 0) + if (sem_post((*s_etat_processus).semaphore_fork) != 0) +# endif { (*s_etat_processus).erreur_systeme = d_es_processus; return; } -# endif 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)) == -1) + while(sem_wait(&((*s_etat_processus).semaphore_fork)) != 0) # else - while(sem_wait((*s_etat_processus).semaphore_fork) == -1) + while(sem_wait((*s_etat_processus).semaphore_fork) != 0) # endif { if (errno != EINTR) @@ -1431,9 +1289,9 @@ instruction_swi(struct_processus *s_etat INCR_GRANULARITE(attente.tv_nsec); # ifndef SEMAPHORES_NOMMES - if (sem_post(&((*s_etat_processus).semaphore_fork)) != 0) + if (sem_post(&((*s_etat_processus).semaphore_fork)) != 0) # else - if (sem_post((*s_etat_processus).semaphore_fork) != 0) + if (sem_post((*s_etat_processus).semaphore_fork) != 0) # endif { (*s_etat_processus).erreur_systeme = d_es_processus; @@ -1441,10 +1299,12 @@ instruction_swi(struct_processus *s_etat } } + scrutation_interruptions(s_etat_processus); + # ifndef SEMAPHORES_NOMMES - while(sem_wait(&((*s_etat_processus).semaphore_fork)) == -1) + while(sem_wait(&((*s_etat_processus).semaphore_fork)) != 0) # else - while(sem_wait((*s_etat_processus).semaphore_fork) == -1) + while(sem_wait((*s_etat_processus).semaphore_fork) != 0) # endif { if (errno != EINTR) @@ -1456,33 +1316,29 @@ instruction_swi(struct_processus *s_etat } else { - tid = -1; + 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) - { - (*s_etat_processus).erreur_systeme = d_es_processus; - return; - } + if (sem_post(&((*s_etat_processus).semaphore_fork)) != 0) # else - if (sem_post((*s_etat_processus).semaphore_fork) != 0) + if (sem_post((*s_etat_processus).semaphore_fork) != 0) +# endif { (*s_etat_processus).erreur_systeme = d_es_processus; return; } -# endif 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)) == -1) + while(sem_wait(&((*s_etat_processus).semaphore_fork)) != 0) # else - while(sem_wait((*s_etat_processus).semaphore_fork) == -1) + while(sem_wait((*s_etat_processus).semaphore_fork) != 0) # endif { if (errno != EINTR) @@ -1515,24 +1371,22 @@ instruction_swi(struct_processus *s_etat INCR_GRANULARITE(attente.tv_nsec); # ifndef SEMAPHORES_NOMMES - if (sem_post(&((*s_etat_processus).semaphore_fork)) != 0) - { - (*s_etat_processus).erreur_systeme = d_es_processus; - return; - } + if (sem_post(&((*s_etat_processus).semaphore_fork)) != 0) # else - if (sem_post((*s_etat_processus).semaphore_fork) != 0) + if (sem_post((*s_etat_processus).semaphore_fork) != 0) +# endif { (*s_etat_processus).erreur_systeme = d_es_processus; return; } -# endif } + scrutation_interruptions(s_etat_processus); + # ifndef SEMAPHORES_NOMMES - while(sem_wait(&((*s_etat_processus).semaphore_fork)) == -1) + while(sem_wait(&((*s_etat_processus).semaphore_fork)) != 0) # else - while(sem_wait((*s_etat_processus).semaphore_fork) == -1) + while(sem_wait((*s_etat_processus).semaphore_fork) != 0) # endif { if (errno != EINTR) @@ -1549,18 +1403,14 @@ instruction_swi(struct_processus *s_etat attente.tv_nsec = GRANULARITE_us * 1000; # ifndef SEMAPHORES_NOMMES - if (sem_post(&((*s_etat_processus).semaphore_fork)) != 0) - { - (*s_etat_processus).erreur_systeme = d_es_processus; - return; - } + if (sem_post(&((*s_etat_processus).semaphore_fork)) != 0) # else - if (sem_post((*s_etat_processus).semaphore_fork) != 0) + if (sem_post((*s_etat_processus).semaphore_fork) != 0) +# endif { (*s_etat_processus).erreur_systeme = d_es_processus; return; } -# endif while((longueur_ecriture = write_atomic(s_etat_processus, (*s_etat_processus).pipe_interruptions, @@ -1568,9 +1418,9 @@ instruction_swi(struct_processus *s_etat != sizeof(interruption_reduite)) { # ifndef SEMAPHORES_NOMMES - while(sem_wait(&((*s_etat_processus).semaphore_fork)) == -1) + while(sem_wait(&((*s_etat_processus).semaphore_fork)) != 0) # else - while(sem_wait((*s_etat_processus).semaphore_fork) == -1) + while(sem_wait((*s_etat_processus).semaphore_fork) != 0) # endif { if (errno != EINTR) @@ -1603,24 +1453,22 @@ instruction_swi(struct_processus *s_etat INCR_GRANULARITE(attente.tv_nsec); # ifndef SEMAPHORES_NOMMES - if (sem_post(&((*s_etat_processus).semaphore_fork)) != 0) - { - (*s_etat_processus).erreur_systeme = d_es_processus; - return; - } + if (sem_post(&((*s_etat_processus).semaphore_fork)) != 0) # else - if (sem_post((*s_etat_processus).semaphore_fork) != 0) + if (sem_post((*s_etat_processus).semaphore_fork) != 0) +# endif { (*s_etat_processus).erreur_systeme = d_es_processus; return; } -# endif + + scrutation_interruptions(s_etat_processus); } # ifndef SEMAPHORES_NOMMES - while(sem_wait(&((*s_etat_processus).semaphore_fork)) == -1) + while(sem_wait(&((*s_etat_processus).semaphore_fork)) != 0) # else - while(sem_wait((*s_etat_processus).semaphore_fork) == -1) + while(sem_wait((*s_etat_processus).semaphore_fork) != 0) # endif { if (errno != EINTR) @@ -1638,31 +1486,30 @@ instruction_swi(struct_processus *s_etat attente.tv_nsec = GRANULARITE_us * 1000; # ifndef SEMAPHORES_NOMMES - if (sem_post(&((*s_etat_processus).semaphore_fork)) != 0) - { - (*s_etat_processus).erreur_systeme = d_es_processus; - return; - } + if (sem_post(&((*s_etat_processus).semaphore_fork)) != 0) # else - if (sem_post((*s_etat_processus).semaphore_fork) != 0) + if (sem_post((*s_etat_processus).semaphore_fork) != 0) +# endif { (*s_etat_processus).erreur_systeme = d_es_processus; return; } -# endif 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)) == -1) + while(sem_wait(&((*s_etat_processus).semaphore_fork)) != 0) # else - while(sem_wait((*s_etat_processus).semaphore_fork) == -1) + while(sem_wait((*s_etat_processus).semaphore_fork) != 0) # endif { - (*s_etat_processus).erreur_systeme = d_es_processus; - return; + if (errno != EINTR) + { + (*s_etat_processus).erreur_systeme = d_es_processus; + return; + } } if (longueur_ecriture == -1) @@ -1688,18 +1535,16 @@ instruction_swi(struct_processus *s_etat INCR_GRANULARITE(attente.tv_nsec); # ifndef SEMAPHORES_NOMMES - if (sem_post(&((*s_etat_processus).semaphore_fork)) != 0) - { - (*s_etat_processus).erreur_systeme = d_es_processus; - return; - } + if (sem_post(&((*s_etat_processus).semaphore_fork)) != 0) # else - if (sem_post((*s_etat_processus).semaphore_fork) != 0) + if (sem_post((*s_etat_processus).semaphore_fork) != 0) +# endif { (*s_etat_processus).erreur_systeme = d_es_processus; return; } -# endif + + scrutation_interruptions(s_etat_processus); } pid = getpid(); @@ -1712,9 +1557,9 @@ instruction_swi(struct_processus *s_etat &pid, sizeof(pid))) != sizeof(pid)) { # ifndef SEMAPHORES_NOMMES - while(sem_wait(&((*s_etat_processus).semaphore_fork)) == -1) + while(sem_wait(&((*s_etat_processus).semaphore_fork)) != 0) # else - while(sem_wait((*s_etat_processus).semaphore_fork) == -1) + while(sem_wait((*s_etat_processus).semaphore_fork) != 0) # endif { if (errno != EINTR) @@ -1747,24 +1592,20 @@ instruction_swi(struct_processus *s_etat INCR_GRANULARITE(attente.tv_nsec); # ifndef SEMAPHORES_NOMMES - if (sem_post(&((*s_etat_processus).semaphore_fork)) != 0) - { - (*s_etat_processus).erreur_systeme = d_es_processus; - return; - } + if (sem_post(&((*s_etat_processus).semaphore_fork)) != 0) # else - if (sem_post((*s_etat_processus).semaphore_fork) != 0) + if (sem_post((*s_etat_processus).semaphore_fork) != 0) +# endif { (*s_etat_processus).erreur_systeme = d_es_processus; return; } -# endif } # ifndef SEMAPHORES_NOMMES - while(sem_wait(&((*s_etat_processus).semaphore_fork)) == -1) + while(sem_wait(&((*s_etat_processus).semaphore_fork)) != 0) # else - while(sem_wait((*s_etat_processus).semaphore_fork) == -1) + while(sem_wait((*s_etat_processus).semaphore_fork) != 0) # endif { if (errno != EINTR) @@ -1776,30 +1617,26 @@ instruction_swi(struct_processus *s_etat } else { - tid = -3; + tid = (pthread_t) -3; # ifndef SEMAPHORES_NOMMES - if (sem_post(&((*s_etat_processus).semaphore_fork)) != 0) - { - (*s_etat_processus).erreur_systeme = d_es_processus; - return; - } + if (sem_post(&((*s_etat_processus).semaphore_fork)) != 0) # else - if (sem_post((*s_etat_processus).semaphore_fork) != 0) + if (sem_post((*s_etat_processus).semaphore_fork) != 0) +# endif { (*s_etat_processus).erreur_systeme = d_es_processus; return; } -# endif 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)) == -1) + while(sem_wait(&((*s_etat_processus).semaphore_fork)) != 0) # else - while(sem_wait((*s_etat_processus).semaphore_fork) == -1) + while(sem_wait((*s_etat_processus).semaphore_fork) != 0) # endif { if (errno != EINTR) @@ -1832,18 +1669,16 @@ instruction_swi(struct_processus *s_etat INCR_GRANULARITE(attente.tv_nsec); # ifndef SEMAPHORES_NOMMES - if (sem_post(&((*s_etat_processus).semaphore_fork)) != 0) - { - (*s_etat_processus).erreur_systeme = d_es_processus; - return; - } + if (sem_post(&((*s_etat_processus).semaphore_fork)) != 0) # else - if (sem_post((*s_etat_processus).semaphore_fork) != 0) + if (sem_post((*s_etat_processus).semaphore_fork) != 0) +# endif { (*s_etat_processus).erreur_systeme = d_es_processus; return; } -# endif + + scrutation_interruptions(s_etat_processus); } tid = pthread_self(); @@ -1856,9 +1691,9 @@ instruction_swi(struct_processus *s_etat &tid, sizeof(tid))) != sizeof(tid)) { # ifndef SEMAPHORES_NOMMES - while(sem_wait(&((*s_etat_processus).semaphore_fork)) == -1) + while(sem_wait(&((*s_etat_processus).semaphore_fork)) != 0) # else - while(sem_wait((*s_etat_processus).semaphore_fork) == -1) + while(sem_wait((*s_etat_processus).semaphore_fork) != 0) # endif { if (errno != EINTR) @@ -1892,24 +1727,22 @@ instruction_swi(struct_processus *s_etat INCR_GRANULARITE(attente.tv_nsec); # ifndef SEMAPHORES_NOMMES - if (sem_post(&((*s_etat_processus).semaphore_fork)) != 0) - { - (*s_etat_processus).erreur_systeme = d_es_processus; - return; - } + if (sem_post(&((*s_etat_processus).semaphore_fork)) != 0) # else - if (sem_post((*s_etat_processus).semaphore_fork) != 0) + if (sem_post((*s_etat_processus).semaphore_fork) != 0) +# endif { (*s_etat_processus).erreur_systeme = d_es_processus; return; } -# endif + + scrutation_interruptions(s_etat_processus); } # ifndef SEMAPHORES_NOMMES - while(sem_wait(&((*s_etat_processus).semaphore_fork)) == -1) + while(sem_wait(&((*s_etat_processus).semaphore_fork)) != 0) # else - while(sem_wait((*s_etat_processus).semaphore_fork) == -1) + while(sem_wait((*s_etat_processus).semaphore_fork) != 0) # endif { if (errno != EINTR) @@ -1924,27 +1757,23 @@ instruction_swi(struct_processus *s_etat attente.tv_nsec = GRANULARITE_us * 1000; # ifndef SEMAPHORES_NOMMES - if (sem_post(&((*s_etat_processus).semaphore_fork)) != 0) - { - (*s_etat_processus).erreur_systeme = d_es_processus; - return; - } + if (sem_post(&((*s_etat_processus).semaphore_fork)) != 0) # else - if (sem_post((*s_etat_processus).semaphore_fork) != 0) + if (sem_post((*s_etat_processus).semaphore_fork) != 0) +# endif { (*s_etat_processus).erreur_systeme = d_es_processus; return; } -# endif while(read_atomic(s_etat_processus, (*s_etat_processus).pipe_acquittement, &tampon, sizeof(unsigned char)) != sizeof(unsigned char)) { # ifndef SEMAPHORES_NOMMES - while(sem_wait(&((*s_etat_processus).semaphore_fork)) == -1) + while(sem_wait(&((*s_etat_processus).semaphore_fork)) != 0) # else - while(sem_wait((*s_etat_processus).semaphore_fork) == -1) + while(sem_wait((*s_etat_processus).semaphore_fork) != 0) # endif { if (errno != EINTR) @@ -1958,20 +1787,22 @@ instruction_swi(struct_processus *s_etat INCR_GRANULARITE(attente.tv_nsec); # ifndef SEMAPHORES_NOMMES - if (sem_post(&((*s_etat_processus).semaphore_fork)) != 0) + if (sem_post(&((*s_etat_processus).semaphore_fork)) != 0) # else - if (sem_post((*s_etat_processus).semaphore_fork) != 0) + 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)) == -1) + while(sem_wait(&((*s_etat_processus).semaphore_fork)) != 0) # else - while(sem_wait((*s_etat_processus).semaphore_fork) == -1) + while(sem_wait((*s_etat_processus).semaphore_fork) != 0) # endif { if (errno != EINTR)