--- rpl/src/gestion_variables.c 2012/10/07 21:57:48 1.62 +++ rpl/src/gestion_variables.c 2012/10/08 07:37:06 1.63 @@ -1958,6 +1958,7 @@ copie_arbre_variables(struct_processus * struct_liste_variables_statiques *l_element_statique_courant; struct_variable s_variable; + struct_variable_statique s_variable_statique; unsigned char *ptr; @@ -2181,15 +2182,31 @@ copie_arbre_variables(struct_processus * ptr++; } - if (creation_variable_statique(s_nouvel_etat_processus, - (*l_element_statique_courant).variable) == d_erreur) + // Il faut copier la variable pour la dissocier de la variable + // restant dans le thread parent. + + s_variable_statique = (*(*l_element_statique_courant).variable); + + if (copie_objet(s_etat_processus, s_variable_statique.objet, 'P') + == NULL) + { + (*s_etat_processus).erreur_systeme = d_es_allocation_memoire; + return; + } + + if ((s_variable_statique.nom = malloc((strlen( + (*(*l_element_statique_courant).variable).nom) + 1) * + sizeof(unsigned char))) == NULL) { (*s_etat_processus).erreur_systeme = d_es_allocation_memoire; return; } - if (copie_objet(s_etat_processus, (*(*l_element_statique_courant) - .variable).objet, 'P') == NULL) + strcpy(s_variable_statique.nom, (*(*l_element_statique_courant) + .variable).nom); + + if (creation_variable_statique(s_nouvel_etat_processus, + &s_variable_statique) == d_erreur) { (*s_etat_processus).erreur_systeme = d_es_allocation_memoire; return;