--- rpl/src/gestion_processus.c 2010/07/31 10:34:17 1.22 +++ rpl/src/gestion_processus.c 2012/12/18 13:19:35 1.57 @@ -1,7 +1,7 @@ /* ================================================================================ - RPL/2 (R) version 4.0.18 - Copyright (C) 1989-2010 Dr. BERTRAND Joël + RPL/2 (R) version 4.1.12 + Copyright (C) 1989-2012 Dr. BERTRAND Joël This file is part of RPL/2. @@ -20,7 +20,7 @@ */ -#include "rpl.conv.h" +#include "rpl-conv.h" /* @@ -57,8 +57,6 @@ surveillance_processus(void *argument) pthread_t tid_candidat; - sigset_t masque; - ssize_t longueur_ecriture; struct_descripteur_thread *s_argument_thread; @@ -75,16 +73,6 @@ surveillance_processus(void *argument) unsigned int tampon_erreur_execution; unsigned int tampon_erreur_systeme; - sigemptyset(&masque); - sigaddset(&masque, SIGINJECT); - sigaddset(&masque, SIGFSTOP); - sigaddset(&masque, SIGFABORT); - sigaddset(&masque, SIGURG); - sigaddset(&masque, SIGALRM); - sigaddset(&masque, SIGCONT); - sigaddset(&masque, SIGINT); - pthread_sigmask(SIG_BLOCK, &masque, NULL); - s_argument_thread = argument; s_etat_processus = (*s_argument_thread).s_etat_processus; @@ -344,8 +332,8 @@ surveillance_processus(void *argument) d_es_processus; } - pthread_kill((*s_argument_thread).thread_pere, - SIGINJECT); + envoi_signal_thread((*s_argument_thread).thread_pere, + rpl_siginject); } } else @@ -530,8 +518,8 @@ surveillance_processus(void *argument) d_es_processus; } - pthread_kill((*s_argument_thread).thread_pere, - SIGINJECT); + envoi_signal_thread((*s_argument_thread).thread_pere, + rpl_siginject); } } else @@ -925,6 +913,9 @@ surveillance_processus(void *argument) (*s_etat_processus).erreur_systeme_processus_fils = d_es_processus; } + + envoi_signal_thread((*s_argument_thread).thread_pere, + rpl_siginject); } } else @@ -1839,6 +1830,7 @@ surveillance_processus(void *argument) } pthread_exit(NULL); + return(NULL); } @@ -3396,32 +3388,34 @@ lecture_pipe(struct_processus *s_etat_pr ================================================================================ */ -extern inline void +void scrutation_injection(struct_processus *s_etat_processus) { fd_set ensemble_descripteurs; -# ifndef OpenBSD + logical1 drapeau_erreur; + logical1 registre_arret_si_exception; + +# ifdef PSELECT struct timespec timeout; # else struct timeval timeout; # endif - logical1 drapeau_erreur; - logical1 registre_arret_si_exception; - unsigned char tampon; unsigned char tampon_profilage[20]; // Si on est dans le processus père, il n'y a rien à surveiller. - if ((*s_etat_processus).var_volatile_processus_pere == 0) + scrutation_interruptions(s_etat_processus); + + if ((*s_etat_processus).var_volatile_processus_racine == 0) { FD_ZERO(&ensemble_descripteurs); FD_SET((*s_etat_processus).pipe_nombre_injections, &ensemble_descripteurs); -# ifndef OpenBSD +# ifdef PSELECT timeout.tv_sec = 0; timeout.tv_nsec = 0; @@ -3609,7 +3603,8 @@ scrutation_injection(struct_processus *s ================================================================================ */ -inline int test_arret(struct_processus *s_etat_processus) +int +test_arret(struct_processus *s_etat_processus) { return((int) (*s_etat_processus).var_volatile_requete_arret); }