--- rpl/src/gestion_processus.c 2010/03/09 10:18:44 1.5 +++ rpl/src/gestion_processus.c 2010/06/02 10:28:45 1.13 @@ -1,6 +1,6 @@ /* ================================================================================ - RPL/2 (R) version 4.0.13 + RPL/2 (R) version 4.0.16 Copyright (C) 1989-2010 Dr. BERTRAND Joël This file is part of RPL/2. @@ -76,6 +76,7 @@ surveillance_processus(void *argument) sigemptyset(&masque); sigaddset(&masque, SIGINJECT); sigaddset(&masque, SIGFSTOP); + sigaddset(&masque, SIGFABORT); sigaddset(&masque, SIGURG); sigaddset(&masque, SIGALRM); sigaddset(&masque, SIGCONT); @@ -713,7 +714,7 @@ surveillance_processus(void *argument) } BUG(l_element_courant == NULL, - printf("Process or thread not found")); + printf("Process or thread not found\n")); if (pthread_mutex_unlock(&((*s_etat_processus).mutex)) != 0) @@ -1753,6 +1754,8 @@ surveillance_processus(void *argument) (*s_etat_processus).l_base_pile_processus = (*l_element_courant).suivant; + free((*(*l_element_courant).donnee).objet); + free((*l_element_courant).donnee); free(l_element_courant); l_element_courant = (struct_liste_chainee *) @@ -1762,6 +1765,9 @@ surveillance_processus(void *argument) { (*l_element_precedent).suivant = (*l_element_courant).suivant; + + free((*(*l_element_courant).donnee).objet); + free((*l_element_courant).donnee); free(l_element_courant); } @@ -3378,12 +3384,16 @@ lecture_pipe(struct_processus *s_etat_pr ================================================================================ */ -inline void +extern inline void scrutation_injection(struct_processus *s_etat_processus) { fd_set ensemble_descripteurs; - struct timespec timeout; +# ifndef OpenBSD + struct timespec timeout; +# else + struct timeval timeout; +# endif unsigned char tampon; @@ -3395,11 +3405,19 @@ scrutation_injection(struct_processus *s FD_SET((*s_etat_processus).pipe_nombre_injections, &ensemble_descripteurs); +# ifndef OpenBSD 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 { if (read_atomic(s_etat_processus, (*s_etat_processus).pipe_nombre_injections, @@ -3432,7 +3450,7 @@ scrutation_injection(struct_processus *s /* ================================================================================ - Fonction de test du draeau d'arrêt + Fonction de test du drapeau d'arrêt ================================================================================ Entrées : pointeur sur une structure --------------------------------------------------------------------------------