--- rpl/src/gestion_threads.c 2010/12/08 20:59:38 1.31 +++ rpl/src/gestion_threads.c 2011/08/30 14:19:28 1.47 @@ -1,7 +1,7 @@ /* ================================================================================ - RPL/2 (R) version 4.0.20 - Copyright (C) 1989-2010 Dr. BERTRAND Joël + RPL/2 (R) version 4.1.3 + Copyright (C) 1989-2011 Dr. BERTRAND Joël This file is part of RPL/2. @@ -882,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++) { @@ -929,6 +916,17 @@ lancement_thread(void *argument) l_element_courant = l_element_suivant; } + l_element_courant = (*s_etat_processus).l_base_pile_undo; + while(l_element_courant != NULL) + { + l_element_suivant = (*l_element_courant).suivant; + + liberation(s_etat_processus, (*l_element_courant).donnee); + free(l_element_courant); + + l_element_courant = l_element_suivant; + } + l_element_courant = (*s_etat_processus).l_base_pile_contextes; while(l_element_courant != NULL) { @@ -1083,6 +1081,7 @@ lancement_thread(void *argument) sem_destroy(&((*s_etat_processus).semaphore_fork)); + liberation_contexte_cas(s_etat_processus); free((*s_etat_processus).localisation); free(s_etat_processus);