--- rpl/src/gestion_processus.c 2013/09/06 10:30:51 1.70 +++ rpl/src/gestion_processus.c 2017/01/18 15:44:18 1.89 @@ -1,7 +1,7 @@ /* ================================================================================ - RPL/2 (R) version 4.1.16 - Copyright (C) 1989-2013 Dr. BERTRAND Joël + RPL/2 (R) version 4.1.26 + Copyright (C) 1989-2017 Dr. BERTRAND Joël This file is part of RPL/2. @@ -83,6 +83,7 @@ surveillance_processus(void *argument) BUG(1, uprintf("General mutex error!\n")); } + nombre_thread_surveillance_processus++; insertion_thread_surveillance(s_etat_processus, s_argument_thread); if (pthread_mutex_unlock(&((*s_etat_processus).mutex_pile_processus)) != 0) @@ -389,7 +390,6 @@ surveillance_processus(void *argument) } else { - perror("read"); (*s_etat_processus).erreur_systeme = d_es_processus; } @@ -1427,6 +1427,7 @@ surveillance_processus(void *argument) } retrait_thread_surveillance(s_etat_processus, s_argument_thread); + nombre_thread_surveillance_processus--; if (pthread_mutex_unlock(&((*s_etat_processus) .mutex_pile_processus)) != 0) @@ -1436,7 +1437,6 @@ surveillance_processus(void *argument) } pthread_exit(NULL); - return(NULL); } @@ -2997,43 +2997,25 @@ lecture_pipe(struct_processus *s_etat_pr void scrutation_injection(struct_processus *s_etat_processus) { - fd_set ensemble_descripteurs; - logical1 drapeau_erreur; logical1 registre_arret_si_exception; -# ifdef PSELECT - struct timespec timeout; -# else - struct timeval timeout; -# endif + struct pollfd fds; unsigned char tampon; unsigned char tampon_profilage[20]; - // Si on est dans le processus père, il n'y a rien à surveiller. - scrutation_interruptions(s_etat_processus); + // Si on est dans le processus père, il n'y a rien à surveiller. + if ((*s_etat_processus).var_volatile_processus_racine == 0) { - FD_ZERO(&ensemble_descripteurs); - FD_SET((*s_etat_processus).pipe_nombre_injections, - &ensemble_descripteurs); - -# ifdef PSELECT - timeout.tv_sec = 0; - timeout.tv_nsec = 0; - - if (pselect((*s_etat_processus).pipe_nombre_injections + 1, - &ensemble_descripteurs, NULL, NULL, &timeout, NULL) > 0) -# else - timeout.tv_sec = 0; - timeout.tv_usec = 0; - - if (select((*s_etat_processus).pipe_nombre_injections + 1, - &ensemble_descripteurs, NULL, NULL, &timeout) > 0) -# endif + fds.fd = (*s_etat_processus).pipe_nombre_injections; + fds.events = POLLIN; + fds.revents = 0; + + if (poll(&fds, 1, 0) > 0) { if (read_atomic(s_etat_processus, (*s_etat_processus).pipe_nombre_injections, @@ -3190,7 +3172,6 @@ scrutation_injection(struct_processus *s } } } - } return;