--- rpl/src/instructions_s9.c 2010/02/10 10:14:25 1.3 +++ rpl/src/instructions_s9.c 2010/07/24 16:39:44 1.14 @@ -1,6 +1,6 @@ /* ================================================================================ - RPL/2 (R) version 4.0.11 + RPL/2 (R) version 4.0.18 Copyright (C) 1989-2010 Dr. BERTRAND Joël This file is part of RPL/2. @@ -186,9 +186,12 @@ instruction_sort(struct_processus *s_eta return; } - if ((*(*(*s_etat_processus).s_liste_variables_partagees) + if (((*(*(*s_etat_processus).s_liste_variables_partagees) .table[(*(*s_etat_processus).s_liste_variables_partagees) - .position_variable].objet).type != LST) + .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 (pthread_mutex_unlock(&((*(*s_etat_processus) .s_liste_variables_partagees).mutex)) != 0) @@ -230,9 +233,12 @@ instruction_sort(struct_processus *s_eta } else { - if ((*(*s_etat_processus).s_liste_variables + 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 != LST) + .type != TBL)) { (*s_etat_processus).erreur_execution = d_ex_erreur_type_argument; @@ -457,7 +463,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 @@ -551,12 +556,12 @@ 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)); + swap(&((*((struct_tableau *) + (*s_objet_liste).objet)).elements + [indice_i - 1]), + &((*((struct_tableau *) (*s_objet_liste) + .objet)).elements[indice_l - 1]), + sizeof(struct_objet *)); indice_i -= ecartement; @@ -964,6 +969,12 @@ instruction_suspend(struct_processus *s_ return; } + if (sigdelset(&masque, SIGFABORT) != 0) + { + (*s_etat_processus).erreur_systeme = d_es_processus; + return; + } + if (sigdelset(&masque, SIGURG) != 0) { (*s_etat_processus).erreur_systeme = d_es_processus; @@ -986,15 +997,27 @@ 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; } +# else + if (sem_post((*s_etat_processus).semaphore_fork) != 0) + { + (*s_etat_processus).erreur_systeme = d_es_processus; + return; + } +# endif sigsuspend(&masque); +# ifndef SEMAPHORES_NOMMES while(sem_wait(&((*s_etat_processus).semaphore_fork)) == -1) +# else + while(sem_wait((*s_etat_processus).semaphore_fork) == -1) +# endif { if (errno != EINTR) { @@ -1359,17 +1382,29 @@ instruction_swi(struct_processus *s_etat 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; } +# else + if (sem_post((*s_etat_processus).semaphore_fork) != 0) + { + (*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) +# else + while(sem_wait((*s_etat_processus).semaphore_fork) == -1) +# endif { if (errno != EINTR) { @@ -1400,14 +1435,22 @@ instruction_swi(struct_processus *s_etat 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)) == -1) +# else + while(sem_wait((*s_etat_processus).semaphore_fork) == -1) +# endif { if (errno != EINTR) { @@ -1423,17 +1466,29 @@ instruction_swi(struct_processus *s_etat 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; } +# else + if (sem_post((*s_etat_processus).semaphore_fork) != 0) + { + (*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) +# else + while(sem_wait((*s_etat_processus).semaphore_fork) == -1) +# endif { if (errno != EINTR) { @@ -1464,14 +1519,26 @@ instruction_swi(struct_processus *s_etat nanosleep(&attente, NULL); 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; } +# else + if (sem_post((*s_etat_processus).semaphore_fork) != 0) + { + (*s_etat_processus).erreur_systeme = d_es_processus; + return; + } +# endif } +# ifndef SEMAPHORES_NOMMES while(sem_wait(&((*s_etat_processus).semaphore_fork)) == -1) +# else + while(sem_wait((*s_etat_processus).semaphore_fork) == -1) +# endif { if (errno != EINTR) { @@ -1486,18 +1553,30 @@ instruction_swi(struct_processus *s_etat 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; } +# else + if (sem_post((*s_etat_processus).semaphore_fork) != 0) + { + (*s_etat_processus).erreur_systeme = d_es_processus; + return; + } +# endif while((longueur_ecriture = write_atomic(s_etat_processus, (*s_etat_processus).pipe_interruptions, &interruption_reduite, sizeof(interruption_reduite))) != sizeof(interruption_reduite)) { +# ifndef SEMAPHORES_NOMMES while(sem_wait(&((*s_etat_processus).semaphore_fork)) == -1) +# else + while(sem_wait((*s_etat_processus).semaphore_fork) == -1) +# endif { if (errno != EINTR) { @@ -1528,14 +1607,26 @@ instruction_swi(struct_processus *s_etat nanosleep(&attente, NULL); 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; } +# else + if (sem_post((*s_etat_processus).semaphore_fork) != 0) + { + (*s_etat_processus).erreur_systeme = d_es_processus; + return; + } +# endif } +# ifndef SEMAPHORES_NOMMES while(sem_wait(&((*s_etat_processus).semaphore_fork)) == -1) +# else + while(sem_wait((*s_etat_processus).semaphore_fork) == -1) +# endif { if (errno != EINTR) { @@ -1551,18 +1642,29 @@ instruction_swi(struct_processus *s_etat 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; } +# else + if (sem_post((*s_etat_processus).semaphore_fork) != 0) + { + (*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)) { - while(sem_wait(&((*s_etat_processus).semaphore_fork)) - == -1) +# ifndef SEMAPHORES_NOMMES + while(sem_wait(&((*s_etat_processus).semaphore_fork)) == -1) +# else + while(sem_wait((*s_etat_processus).semaphore_fork) == -1) +# endif { (*s_etat_processus).erreur_systeme = d_es_processus; return; @@ -1590,11 +1692,19 @@ instruction_swi(struct_processus *s_etat nanosleep(&attente, NULL); 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; } +# else + if (sem_post((*s_etat_processus).semaphore_fork) != 0) + { + (*s_etat_processus).erreur_systeme = d_es_processus; + return; + } +# endif } pid = getpid(); @@ -1606,7 +1716,11 @@ instruction_swi(struct_processus *s_etat (*s_etat_processus).pipe_nombre_interruptions_attente, &pid, sizeof(pid))) != sizeof(pid)) { +# ifndef SEMAPHORES_NOMMES while(sem_wait(&((*s_etat_processus).semaphore_fork)) == -1) +# else + while(sem_wait((*s_etat_processus).semaphore_fork) == -1) +# endif { if (errno != EINTR) { @@ -1637,14 +1751,26 @@ instruction_swi(struct_processus *s_etat nanosleep(&attente, NULL); 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; } +# else + if (sem_post((*s_etat_processus).semaphore_fork) != 0) + { + (*s_etat_processus).erreur_systeme = d_es_processus; + return; + } +# endif } +# ifndef SEMAPHORES_NOMMES while(sem_wait(&((*s_etat_processus).semaphore_fork)) == -1) +# else + while(sem_wait((*s_etat_processus).semaphore_fork) == -1) +# endif { if (errno != EINTR) { @@ -1657,17 +1783,29 @@ instruction_swi(struct_processus *s_etat { tid = -3; +# ifndef SEMAPHORES_NOMMES if (sem_post(&((*s_etat_processus).semaphore_fork)) != 0) { (*s_etat_processus).erreur_systeme = d_es_processus; return; } +# else + if (sem_post((*s_etat_processus).semaphore_fork) != 0) + { + (*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) +# else + while(sem_wait((*s_etat_processus).semaphore_fork) == -1) +# endif { if (errno != EINTR) { @@ -1698,11 +1836,19 @@ instruction_swi(struct_processus *s_etat nanosleep(&attente, NULL); 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; } +# else + if (sem_post((*s_etat_processus).semaphore_fork) != 0) + { + (*s_etat_processus).erreur_systeme = d_es_processus; + return; + } +# endif } tid = pthread_self(); @@ -1714,7 +1860,11 @@ instruction_swi(struct_processus *s_etat (*s_etat_processus).pipe_nombre_interruptions_attente, &tid, sizeof(tid))) != sizeof(tid)) { +# ifndef SEMAPHORES_NOMMES while(sem_wait(&((*s_etat_processus).semaphore_fork)) == -1) +# else + while(sem_wait((*s_etat_processus).semaphore_fork) == -1) +# endif { if (errno != EINTR) { @@ -1746,14 +1896,26 @@ instruction_swi(struct_processus *s_etat nanosleep(&attente, NULL); 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; } +# else + if (sem_post((*s_etat_processus).semaphore_fork) != 0) + { + (*s_etat_processus).erreur_systeme = d_es_processus; + return; + } +# endif } +# ifndef SEMAPHORES_NOMMES while(sem_wait(&((*s_etat_processus).semaphore_fork)) == -1) +# else + while(sem_wait((*s_etat_processus).semaphore_fork) == -1) +# endif { if (errno != EINTR) { @@ -1766,17 +1928,29 @@ instruction_swi(struct_processus *s_etat 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; } +# else + if (sem_post((*s_etat_processus).semaphore_fork) != 0) + { + (*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) +# else + while(sem_wait((*s_etat_processus).semaphore_fork) == -1) +# endif { if (errno != EINTR) { @@ -1788,14 +1962,22 @@ instruction_swi(struct_processus *s_etat 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)) == -1) +# else + while(sem_wait((*s_etat_processus).semaphore_fork) == -1) +# endif { if (errno != EINTR) {