--- rpl/src/instructions_v1.c 2012/10/01 11:05:07 1.42 +++ rpl/src/instructions_v1.c 2013/02/26 19:56:16 1.48 @@ -1,7 +1,7 @@ /* ================================================================================ - RPL/2 (R) version 4.1.11 - Copyright (C) 1989-2012 Dr. BERTRAND Joël + RPL/2 (R) version 4.1.12 + Copyright (C) 1989-2013 Dr. BERTRAND Joël This file is part of RPL/2. @@ -1023,18 +1023,18 @@ instruction_vars(struct_processus *s_eta (*s_objet_resultat).objet = NULL; l_element_precedent = NULL; - nb_variables = nombre_variables(s_etat_processus, - (*s_etat_processus).s_arbre_variables); + nb_variables = nombre_variables(s_etat_processus); if ((tableau = malloc(nb_variables * sizeof(struct_tableau_variables))) == NULL) { + liberation_mutexes_arbre_variables_partagees(s_etat_processus, + (*(*s_etat_processus).s_arbre_variables_partagees)); (*s_etat_processus).erreur_systeme = d_es_allocation_memoire; return; } - liste_variables(s_etat_processus, tableau, 0, - (*s_etat_processus).s_arbre_variables); + liste_variables(s_etat_processus, tableau); for(i = 0; i < nb_variables; i++) { @@ -1088,26 +1088,12 @@ instruction_vars(struct_processus *s_eta if (tableau[i].objet == NULL) { - if (pthread_mutex_lock(&((*(*s_etat_processus) - .s_liste_variables_partagees).mutex)) != 0) - { - (*s_etat_processus).erreur_systeme = d_es_processus; - return; - } - if (recherche_variable_partagee(s_etat_processus, tableau[i].nom, tableau[i].variable_partagee, - tableau[i].origine) == d_faux) + tableau[i].origine) == NULL) { // La variable partagée n'existe plus. - if (pthread_mutex_unlock(&((*(*s_etat_processus) - .s_liste_variables_partagees).mutex)) != 0) - { - (*s_etat_processus).erreur_systeme = d_es_processus; - return; - } - continue; } @@ -1129,7 +1115,7 @@ instruction_vars(struct_processus *s_eta if (variable_partagee == d_vrai) { if (pthread_mutex_unlock(&((*(*s_etat_processus) - .s_liste_variables_partagees).mutex)) != 0) + .pointeur_variable_partagee_courante).mutex)) != 0) { (*s_etat_processus).erreur_systeme = d_es_processus; return; @@ -1152,7 +1138,7 @@ instruction_vars(struct_processus *s_eta if (variable_partagee == d_vrai) { if (pthread_mutex_unlock(&((*(*s_etat_processus) - .s_liste_variables_partagees).mutex)) != 0) + .pointeur_variable_partagee_courante).mutex)) != 0) { (*s_etat_processus).erreur_systeme = d_es_processus; return; @@ -1178,7 +1164,7 @@ instruction_vars(struct_processus *s_eta if (variable_partagee == d_vrai) { if (pthread_mutex_unlock(&((*(*s_etat_processus) - .s_liste_variables_partagees).mutex)) != 0) + .pointeur_variable_partagee_courante).mutex)) != 0) { (*s_etat_processus).erreur_systeme = d_es_processus; return; @@ -1196,7 +1182,7 @@ instruction_vars(struct_processus *s_eta if (variable_partagee == d_vrai) { if (pthread_mutex_unlock(&((*(*s_etat_processus) - .s_liste_variables_partagees).mutex)) != 0) + .pointeur_variable_partagee_courante).mutex)) != 0) { (*s_etat_processus).erreur_systeme = d_es_processus; return; @@ -1222,7 +1208,7 @@ instruction_vars(struct_processus *s_eta if (variable_partagee == d_vrai) { if (pthread_mutex_unlock(&((*(*s_etat_processus) - .s_liste_variables_partagees).mutex)) != 0) + .pointeur_variable_partagee_courante).mutex)) != 0) { (*s_etat_processus).erreur_systeme = d_es_processus; return; @@ -1240,13 +1226,11 @@ instruction_vars(struct_processus *s_eta if (((*(*(*((struct_liste_chainee *) (*((struct_objet *) (*l_element_courant).donnee)).objet)).suivant).suivant) .donnee = copie_objet(s_etat_processus, - (*(*s_etat_processus) - .s_liste_variables_partagees).table[(*(*s_etat_processus) - .s_liste_variables_partagees).position_variable].objet, - 'P')) == NULL) + (*(*s_etat_processus).pointeur_variable_partagee_courante) + .objet, 'P')) == NULL) { if (pthread_mutex_unlock(&((*(*s_etat_processus) - .s_liste_variables_partagees).mutex)) != 0) + .pointeur_variable_partagee_courante).mutex)) != 0) { (*s_etat_processus).erreur_systeme = d_es_processus; return; @@ -1257,7 +1241,7 @@ instruction_vars(struct_processus *s_eta } if (pthread_mutex_unlock(&((*(*s_etat_processus) - .s_liste_variables_partagees).mutex)) != 0) + .pointeur_variable_partagee_courante).mutex)) != 0) { (*s_etat_processus).erreur_systeme = d_es_processus; return; @@ -1310,9 +1294,20 @@ instruction_vars(struct_processus *s_eta return; } - strcpy((unsigned char *) (*(*(*(*(*((struct_liste_chainee *) - (*((struct_objet *) (*l_element_courant).donnee)).objet)) - .suivant).suivant) .suivant).donnee).objet, "STATIC"); + if (tableau[i].variable_masquee == d_vrai) + { + strcpy((unsigned char *) (*(*(*(*(*((struct_liste_chainee *) + (*((struct_objet *) (*l_element_courant).donnee)) + .objet)).suivant).suivant).suivant).donnee).objet, + "SHADOW"); + } + else + { + strcpy((unsigned char *) (*(*(*(*(*((struct_liste_chainee *) + (*((struct_objet *) (*l_element_courant).donnee)) + .objet)).suivant).suivant).suivant).donnee).objet, + "STATIC"); + } } else {