--- rpl/src/gestion_threads.c 2010/06/19 15:54:51 1.21 +++ rpl/src/gestion_threads.c 2011/06/27 09:04:55 1.42 @@ -1,7 +1,7 @@ /* ================================================================================ - RPL/2 (R) version 4.0.16 - Copyright (C) 1989-2010 Dr. BERTRAND Joël + RPL/2 (R) version 4.1.0 + Copyright (C) 1989-2011 Dr. BERTRAND Joël This file is part of RPL/2. @@ -20,7 +20,7 @@ */ -#include "rpl.conv.h" +#include "rpl-conv.h" /* @@ -268,6 +268,7 @@ lancement_thread(void *argument) && ((*s_etat_processus).at_exit != NULL)) { (*s_etat_processus).var_volatile_requete_arret = 0; + (*s_etat_processus).var_volatile_traitement_retarde_stop = -1; if (evaluation(s_etat_processus, (*s_etat_processus).at_exit, 'E') == d_erreur) @@ -881,21 +882,8 @@ lancement_thread(void *argument) (*s_etat_processus).instruction_derniere_erreur = NULL; } - for(i = 0; i < (*s_etat_processus).nombre_variables; i++) - { - // Les définitions ne sont pas libérées parce qu'elles sont partagées - // avec le thread père. - - if ((*s_etat_processus).s_liste_variables[i].niveau != 0) - { - liberation(s_etat_processus, - (*s_etat_processus).s_liste_variables[i].objet); - } - - free((*s_etat_processus).s_liste_variables[i].nom); - } - - free((*s_etat_processus).s_liste_variables); + liberation_arbre_variables(s_etat_processus, + (*s_etat_processus).s_arbre_variables, d_faux); for(i = 0; i < (*s_etat_processus).nombre_variables_statiques; i++) { @@ -1030,6 +1018,7 @@ lancement_thread(void *argument) liberation(s_etat_processus, (*s_argument_thread).argument); liberation(s_etat_processus, (*s_etat_processus).at_exit); + liberation(s_etat_processus, (*s_etat_processus).at_poke); for(i = 0; i < d_NOMBRE_INTERRUPTIONS; i++) { @@ -1079,6 +1068,8 @@ lancement_thread(void *argument) pthread_mutex_destroy(&((*s_etat_processus).mutex)); pthread_mutex_destroy(&((*s_etat_processus).mutex_allocation)); + sem_destroy(&((*s_etat_processus).semaphore_fork)); + free((*s_etat_processus).localisation); free(s_etat_processus); @@ -1087,6 +1078,7 @@ lancement_thread(void *argument) (*s_argument_thread).thread_actif = d_faux; pthread_exit(NULL); + return(NULL); } // vim: ts=4