--- rpl/src/interruptions.c 2010/05/19 09:22:34 1.16 +++ rpl/src/interruptions.c 2010/06/02 10:28:45 1.19 @@ -1,6 +1,6 @@ /* ================================================================================ - RPL/2 (R) version 4.0.15 + RPL/2 (R) version 4.0.16 Copyright (C) 1989-2010 Dr. BERTRAND Joël This file is part of RPL/2. @@ -366,7 +366,6 @@ retrait_thread_surveillance(struct_proce return; } - // l_element_courant->donnee n'est pas bonne lorsque ça part en vrille. if (l_element_precedent == NULL) { liste_threads_surveillance = (*l_element_courant).suivant; @@ -678,6 +677,10 @@ liberation_threads(struct_processus *s_e (*((struct_liste_chainee *) element_courant)).donnee); element_suivant = (*((struct_liste_chainee *) element_courant)) .suivant; + + free((*(*((struct_liste_chainee *) element_courant)).donnee) + .objet); + free((*((struct_liste_chainee *) element_courant)).donnee); free((struct_liste_chainee *) element_courant); element_courant = element_suivant; } @@ -1441,7 +1444,7 @@ recherche_thread_principal(pid_t pid, pt */ // Les routines suivantes sont uniquement appelées depuis les gestionnaires -// des signaux asynchrones. Elles de doivent pas bloquer dans le cas où +// des signaux asynchrones. Elles ne doivent pas bloquer dans le cas où // les sémaphores sont déjà bloqués par un gestionnaire de signal. static inline void @@ -2132,8 +2135,8 @@ interruption9(int signal, siginfo_t *sig fflush(stdout); } - pthread_kill((*s_etat_processus).tid_processus_pere, SIGFABORT); deverrouillage_gestionnaire_signaux(); + interruption11(signal, siginfo, context); return; }