--- rpl/src/gestion_objets.c 2012/09/29 17:53:02 1.85 +++ rpl/src/gestion_objets.c 2013/02/27 17:11:40 1.95 @@ -1,7 +1,7 @@ /* ================================================================================ - RPL/2 (R) version 4.1.10 - Copyright (C) 1989-2012 Dr. BERTRAND Joël + RPL/2 (R) version 4.1.13 + Copyright (C) 1989-2013 Dr. BERTRAND Joël This file is part of RPL/2. @@ -112,9 +112,11 @@ initialisation_allocateur(struct_process (*s_etat_processus).pointeur_maillons = 0; (*s_etat_processus).pointeur_variables_noeud = 0; + (*s_etat_processus).pointeur_variables_partagees_noeud = 0; (*s_etat_processus).pointeur_variables_feuille = 0; (*s_etat_processus).pointeur_variables_variable = 0; (*s_etat_processus).pointeur_variables_tableau_noeuds = 0; + (*s_etat_processus).pointeur_variables_tableau_noeuds_partages = 0; return; } @@ -150,12 +152,17 @@ liberation_allocateur(struct_processus * for(i = 0; i < (*s_etat_processus).pointeur_variables_noeud; free((*s_etat_processus).variables_noeud[i++])); + for(i = 0; i < (*s_etat_processus).pointeur_variables_partagees_noeud; + free((*s_etat_processus).variables_partagees_noeud[i++])); for(i = 0; i < (*s_etat_processus).pointeur_variables_feuille; free((*s_etat_processus).variables_feuille[i++])); for(i = 0; i < (*s_etat_processus).pointeur_variables_variable; free((*s_etat_processus).variables_variable[i++])); for(i = 0; i < (*s_etat_processus).pointeur_variables_tableau_noeuds; free((*s_etat_processus).variables_tableau_noeuds[i++])); + for(i = 0; i < (*s_etat_processus) + .pointeur_variables_tableau_noeuds_partages; + free((*s_etat_processus).variables_tableau_noeuds_partages[i++])); { struct_liste_chainee *l_element_courant; @@ -3112,6 +3119,7 @@ copie_etat_processus(struct_processus *s * Copie de la table des variables */ + (*s_nouvel_etat_processus).l_liste_variables_statiques = NULL; copie_arbre_variables(s_etat_processus, s_nouvel_etat_processus); if ((*s_nouvel_etat_processus).erreur_systeme != d_es) @@ -3119,65 +3127,10 @@ copie_etat_processus(struct_processus *s return(NULL); } - /* - * Copie de la table des variables statiques - */ - - if (((*s_nouvel_etat_processus).s_liste_variables_statiques = - malloc((*s_etat_processus).nombre_variables_statiques_allouees * - sizeof(struct_variable_statique))) == NULL) - { - if (pthread_mutex_unlock(&((*s_etat_processus).mutex)) != 0) - { - (*s_etat_processus).erreur_systeme = d_es_processus; - return(NULL); - } - - (*s_etat_processus).erreur_systeme = d_es_allocation_memoire; - return(NULL); - } - - for(i = 0; i < (*s_etat_processus).nombre_variables_statiques; i++) - { - if (((*s_nouvel_etat_processus).s_liste_variables_statiques[i].nom = - malloc((strlen((*s_etat_processus).s_liste_variables_statiques - [i].nom) + 1) * sizeof(unsigned char))) == NULL) - { - if (pthread_mutex_unlock(&((*s_etat_processus).mutex)) != 0) - { - (*s_etat_processus).erreur_systeme = d_es_processus; - return(NULL); - } - - (*s_etat_processus).erreur_systeme = d_es_allocation_memoire; - return(NULL); - } - - strcpy((*s_nouvel_etat_processus).s_liste_variables_statiques[i].nom, - (*s_etat_processus).s_liste_variables_statiques[i].nom); - - (*s_nouvel_etat_processus).s_liste_variables_statiques[i].origine = - (*s_etat_processus).s_liste_variables_statiques[i].origine; - (*s_nouvel_etat_processus).s_liste_variables_statiques[i].niveau = - (*s_etat_processus).s_liste_variables_statiques[i].niveau; - (*s_nouvel_etat_processus).s_liste_variables_statiques[i] - .variable_statique = (*s_etat_processus) - .s_liste_variables_statiques[i].variable_statique; - - if (((*s_nouvel_etat_processus).s_liste_variables_statiques[i].objet = - copie_objet(s_etat_processus, (*s_etat_processus) - .s_liste_variables_statiques[i].objet, 'P')) == NULL) - { - if (pthread_mutex_unlock(&((*s_etat_processus).mutex)) != 0) - { - (*s_etat_processus).erreur_systeme = d_es_processus; - return(NULL); - } - - (*s_etat_processus).erreur_systeme = d_es_allocation_memoire; - return(NULL); - } - } + (*(*s_nouvel_etat_processus).l_liste_variables_partagees) = + (*(*s_etat_processus).l_liste_variables_partagees); + (*(*s_nouvel_etat_processus).s_arbre_variables_partagees) = + (*(*s_etat_processus).s_arbre_variables_partagees); /* * Copie de la pile opérationnelle