--- rpl/src/instructions_v1.c 2013/03/23 16:14:39 1.51 +++ rpl/src/instructions_v1.c 2024/01/17 16:57:17 1.84 @@ -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.36 + Copyright (C) 1989-2024 Dr. BERTRAND Joël This file is part of RPL/2. @@ -132,8 +132,8 @@ instruction_var(struct_processus *s_etat return; } - if (((*s_objet_resultat).objet = variance_statistique((struct_matrice *) - (*s_objet_statistique).objet, 'E')) == NULL) + if (((*s_objet_resultat).objet = variance_statistique(s_etat_processus, + (struct_matrice *) (*s_objet_statistique).objet, 'E')) == NULL) { (*s_etat_processus).erreur_systeme = d_es_allocation_memoire; return; @@ -500,7 +500,8 @@ instruction_version(struct_processus *s_ return; } - if (((*(*l_element_courant).donnee).objet = date_compilation()) == NULL) + if (((*(*l_element_courant).donnee).objet = + date_compilation(s_etat_processus)) == NULL) { (*s_etat_processus).erreur_systeme = d_es_allocation_memoire; return; @@ -933,8 +934,8 @@ instruction_version(struct_processus *s_ return; } - if (((*(*l_element_courant).donnee).objet = conversion_majuscule(HOST)) - == NULL) + if (((*(*l_element_courant).donnee).objet = conversion_majuscule( + s_etat_processus, HOST)) == NULL) { (*s_etat_processus).erreur_systeme = d_es_allocation_memoire; return; @@ -1023,12 +1024,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 +1031,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 +1484,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 +1521,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) {