--- rpl/src/instructions_v1.c 2013/03/23 16:14:39 1.51 +++ rpl/src/instructions_v1.c 2015/01/05 15:32:22 1.62 @@ -1,7 +1,7 @@ /* ================================================================================ - RPL/2 (R) version 4.1.13 - Copyright (C) 1989-2013 Dr. BERTRAND Joël + RPL/2 (R) version 4.1.20 + Copyright (C) 1989-2015 Dr. BERTRAND Joël This file is part of RPL/2. @@ -1023,12 +1023,6 @@ instruction_vars(struct_processus *s_eta (*s_objet_resultat).objet = NULL; l_element_precedent = NULL; - if (pthread_mutex_lock(&mutex_liste_variables_partagees) != 0) - { - (*s_etat_processus).erreur_systeme = d_es_allocation_memoire; - return; - } - nb_variables = nombre_variables(s_etat_processus); if ((tableau = malloc(((size_t) nb_variables) * @@ -1036,19 +1030,12 @@ instruction_vars(struct_processus *s_eta { liberation_mutexes_arbre_variables_partagees(s_etat_processus, (*(*s_etat_processus).s_arbre_variables_partagees)); - pthread_mutex_unlock(&mutex_liste_variables_partagees); (*s_etat_processus).erreur_systeme = d_es_allocation_memoire; return; } nb_variables = liste_variables(s_etat_processus, tableau); - if (pthread_mutex_unlock(&mutex_liste_variables_partagees) != 0) - { - (*s_etat_processus).erreur_systeme = d_es_allocation_memoire; - return; - } - for(i = 0; i < nb_variables; i++) { if (l_element_precedent == NULL) @@ -1496,7 +1483,7 @@ instruction_vars(struct_processus *s_eta } /* - * Préparation du drapeau PRIVATE/SHARED + * Préparation du drapeau PRIVATE/SHARED/MAPPED */ if (((*(*(*(*(*((struct_liste_chainee *) (*((struct_objet *) @@ -1533,6 +1520,29 @@ instruction_vars(struct_processus *s_eta { if (((*(*(*(*(*(*(*((struct_liste_chainee *) (*((struct_objet *) (*l_element_courant).donnee)).objet)).suivant).suivant) + .suivant).suivant).suivant).donnee).objet = malloc(7 * + sizeof(unsigned char))) == NULL) + { + if (tableau[i].mutex != NULL) + { + // La variable est une variable partagée. On libère + // le mutex. + pthread_mutex_unlock(tableau[i].mutex); + } + + (*s_etat_processus).erreur_systeme = d_es_allocation_memoire; + return; + } + + strcpy((unsigned char *) (*(*(*(*(*(*(*((struct_liste_chainee *) + (*((struct_objet *) (*l_element_courant).donnee)).objet)) + .suivant).suivant).suivant).suivant).suivant).donnee).objet, + "MAPPED"); + } + else if (tableau[i].mutex != NULL) + { + if (((*(*(*(*(*(*(*((struct_liste_chainee *) (*((struct_objet *) + (*l_element_courant).donnee)).objet)).suivant).suivant) .suivant).suivant).suivant).donnee).objet = malloc(7 * sizeof(unsigned char))) == NULL) {