--- rpl/src/instructions_s8.c 2011/06/22 13:27:03 1.27 +++ rpl/src/instructions_s8.c 2011/09/20 09:51:43 1.37 @@ -1,6 +1,6 @@ /* ================================================================================ - RPL/2 (R) version 4.1.0.prerelease.3 + RPL/2 (R) version 4.1.3 Copyright (C) 1989-2011 Dr. BERTRAND Joël This file is part of RPL/2. @@ -247,29 +247,17 @@ instruction_send(struct_processus *s_eta 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 + while(sem_wait(&((*s_etat_processus).semaphore_fork)) != 0) { if (errno != EINTR) { @@ -292,19 +280,14 @@ instruction_send(struct_processus *s_eta 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) + if (sem_post(&((*s_etat_processus).semaphore_fork)) + != 0) { (*s_etat_processus).erreur_systeme = d_es_processus; return; } -# endif + + scrutation_interruptions(s_etat_processus); } pid = getpid(); @@ -316,11 +299,7 @@ instruction_send(struct_processus *s_eta (*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 + while(sem_wait(&((*s_etat_processus).semaphore_fork)) != 0) { if (errno != EINTR) { @@ -343,22 +322,16 @@ instruction_send(struct_processus *s_eta 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)) == -1) -# else - while(sem_wait((*s_etat_processus).semaphore_fork) == -1) -# endif + while(sem_wait(&((*s_etat_processus).semaphore_fork)) != 0) { if (errno != EINTR) { @@ -384,35 +357,20 @@ instruction_send(struct_processus *s_eta 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 + while(sem_wait(&((*s_etat_processus).semaphore_fork)) != 0) { - if (errno != EINTR) - { - (*s_etat_processus).erreur_systeme = d_es_processus; - return; - } + (*s_etat_processus).erreur_systeme = d_es_processus; + return; } if (longueur_ecriture == -1) @@ -429,19 +387,13 @@ instruction_send(struct_processus *s_eta 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 + + scrutation_interruptions(s_etat_processus); } tid = pthread_self(); @@ -453,11 +405,7 @@ instruction_send(struct_processus *s_eta (*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 + while(sem_wait(&((*s_etat_processus).semaphore_fork)) != 0) { if (errno != EINTR) { @@ -480,32 +428,19 @@ instruction_send(struct_processus *s_eta 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 + + scrutation_interruptions(s_etat_processus); } -# ifndef SEMAPHORES_NOMMES - while(sem_wait(&((*s_etat_processus).semaphore_fork)) == -1) -# else - while(sem_wait((*s_etat_processus).semaphore_fork) == -1) -# endif + if (sem_post(&((*s_etat_processus).semaphore_fork)) != 0) { - if (errno != EINTR) - { - (*s_etat_processus).erreur_systeme = d_es_processus; - return; - } + (*s_etat_processus).erreur_systeme = d_es_processus; + return; } } @@ -514,28 +449,16 @@ instruction_send(struct_processus *s_eta 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 + while(sem_wait(&((*s_etat_processus).semaphore_fork)) != 0) { if (errno != EINTR) { @@ -547,22 +470,16 @@ instruction_send(struct_processus *s_eta 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)) == -1) -# else - while(sem_wait((*s_etat_processus).semaphore_fork) == -1) -# endif + while(sem_wait(&((*s_etat_processus).semaphore_fork)) != 0) { if (errno != EINTR) { @@ -581,11 +498,7 @@ instruction_send(struct_processus *s_eta 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; @@ -595,17 +508,10 @@ instruction_send(struct_processus *s_eta (*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 (sem_post(&((*s_etat_processus).semaphore_fork)) != 0) { - if (errno != EINTR) - { - (*s_etat_processus).erreur_systeme = d_es_processus; - return; - } + (*s_etat_processus).erreur_systeme = d_es_processus; + return; } if (longueur_ecriture == -1) @@ -622,26 +528,14 @@ instruction_send(struct_processus *s_eta 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 + while(sem_wait(&((*s_etat_processus).semaphore_fork)) != 0) { if (errno != EINTR) { @@ -649,6 +543,8 @@ instruction_send(struct_processus *s_eta return; } } + + scrutation_interruptions(s_etat_processus); } else { @@ -657,11 +553,7 @@ instruction_send(struct_processus *s_eta 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; @@ -671,11 +563,7 @@ instruction_send(struct_processus *s_eta (*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 + while(sem_wait(&((*s_etat_processus).semaphore_fork)) != 0) { if (errno != EINTR) { @@ -698,22 +586,16 @@ instruction_send(struct_processus *s_eta 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)) == -1) -# else - while(sem_wait((*s_etat_processus).semaphore_fork) == -1) -# endif + while(sem_wait(&((*s_etat_processus).semaphore_fork)) != 0) { if (errno != EINTR) { @@ -725,28 +607,16 @@ instruction_send(struct_processus *s_eta // ecriture_pipe() ne peut être interrompu par un signal. -# 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 if (ecriture_pipe(s_etat_processus, (*s_etat_processus).pipe_donnees, s_objet) == d_erreur) { -# ifndef SEMAPHORES_NOMMES - while(sem_wait(&((*s_etat_processus).semaphore_fork)) == -1) -# else - while(sem_wait((*s_etat_processus).semaphore_fork) == -1) -# endif + while(sem_wait(&((*s_etat_processus).semaphore_fork)) != 0) { if (errno != EINTR) { @@ -764,11 +634,7 @@ instruction_send(struct_processus *s_eta return; } -# ifndef SEMAPHORES_NOMMES - while(sem_wait(&((*s_etat_processus).semaphore_fork)) == -1) -# else - while(sem_wait((*s_etat_processus).semaphore_fork) == -1) -# endif + while(sem_wait(&((*s_etat_processus).semaphore_fork)) != 0) { if (errno != EINTR) { @@ -1470,11 +1336,6 @@ instruction_stop(struct_processus *s_eta struct_objet *s_objet; - struct timespec attente; - - attente.tv_sec = 0; - attente.tv_nsec = GRANULARITE_us * 1000; - (*s_etat_processus).erreur_execution = d_ex; if ((*s_etat_processus).affichage_arguments == 'Y') @@ -1520,8 +1381,8 @@ instruction_stop(struct_processus *s_eta if ((*(*((struct_processus_fils *) (*s_objet).objet)).thread) .processus_detache == d_vrai) { - kill((*(*((struct_processus_fils *) (*s_objet).objet)).thread).pid, - SIGFSTOP); + envoi_signal_processus((*(*((struct_processus_fils *) + (*s_objet).objet)).thread).pid, rpl_sigstop); } else { @@ -1581,8 +1442,8 @@ instruction_stop(struct_processus *s_eta if ((*(*((struct_processus_fils *) (*s_objet).objet)).thread).thread_actif == d_vrai) { - pthread_kill((*(*((struct_processus_fils *) - (*s_objet).objet)).thread).tid, SIGFSTOP); + envoi_signal_thread((*(*((struct_processus_fils *) + (*s_objet).objet)).thread).tid, rpl_sigstop); } if (pthread_mutex_unlock(&((*(*((struct_processus_fils *)