--- rpl/src/rpl.c 2012/08/22 10:47:18 1.116 +++ rpl/src/rpl.c 2012/10/04 15:21:26 1.119 @@ -1,6 +1,6 @@ /* ================================================================================ - RPL/2 (R) version 4.1.10 + RPL/2 (R) version 4.1.11 Copyright (C) 1989-2012 Dr. BERTRAND Joël This file is part of RPL/2. @@ -251,6 +251,11 @@ rplinit(int argc, char *argv[], char *en &attributs_mutex); pthread_mutexattr_destroy(&attributs_mutex); + pthread_mutexattr_init(&attributs_mutex); + pthread_mutexattr_settype(&attributs_mutex, PTHREAD_MUTEX_RECURSIVE); + pthread_mutex_init(&mutex_sections_critiques, &attributs_mutex); + pthread_mutexattr_destroy(&attributs_mutex); + # ifndef SEMAPHORES_NOMMES sem_init(&((*s_etat_processus).semaphore_fork), 0, 0); # else @@ -1928,6 +1933,7 @@ rplinit(int argc, char *argv[], char *en gettimeofday(&((*s_etat_processus).horodatage_profilage), NULL); (*s_etat_processus).liste_mutexes = NULL; + (*s_etat_processus).sections_critiques = 0; (*s_etat_processus).test_instruction = 'N'; (*s_etat_processus).nombre_arguments = 0; @@ -1963,14 +1969,12 @@ rplinit(int argc, char *argv[], char *en (*s_etat_processus).l_liste_variables_par_niveau = NULL; (*s_etat_processus).gel_liste_variables = d_faux; (*s_etat_processus).pointeur_variable_courante = NULL; - (*s_etat_processus).s_liste_variables_statiques = NULL; - (*s_etat_processus).nombre_variables_statiques = 0; - (*s_etat_processus).nombre_variables_statiques_allouees = 0; + (*s_etat_processus).pointeur_variable_statique_courante = NULL; + (*s_etat_processus).l_liste_variables_statiques = NULL; (*s_etat_processus).niveau_courant = 0; (*s_etat_processus).niveau_initial = 0; (*s_etat_processus).creation_variables_statiques = d_faux; (*s_etat_processus).creation_variables_partagees = d_faux; - (*s_etat_processus).position_variable_statique_courante = 0; (*s_etat_processus).s_bibliotheques = NULL; (*s_etat_processus).s_instructions_externes = NULL; @@ -2910,6 +2914,11 @@ rplinit(int argc, char *argv[], char *en } } + for(i = 0; i < (*s_etat_processus).sections_critiques; i++) + { + pthread_mutex_unlock(&mutex_sections_critiques); + } + liberation(s_etat_processus, (*s_etat_processus).at_exit); liberation(s_etat_processus, (*s_etat_processus).at_poke); @@ -3336,6 +3345,8 @@ rplinit(int argc, char *argv[], char *en (*s_etat_processus).s_arbre_variables, d_vrai); free((*s_etat_processus).pointeurs_caracteres_variables); +#warning A FIXER + /* for(i = 0; i < (*s_etat_processus) .nombre_variables_statiques; i++) { @@ -3346,6 +3357,7 @@ rplinit(int argc, char *argv[], char *en } free((*s_etat_processus).s_liste_variables_statiques); + */ for(i = 0; i < (*((*s_etat_processus) .s_liste_variables_partagees)).nombre_variables; @@ -3703,6 +3715,7 @@ rplinit(int argc, char *argv[], char *en pthread_mutex_destroy(&((*s_etat_processus).mutex)); pthread_mutex_destroy(&((*s_etat_processus).mutex_allocation)); + pthread_mutex_destroy(&mutex_sections_critiques); # ifndef SEMAPHORES_NOMMES sem_post(&((*s_etat_processus).semaphore_fork)); @@ -3715,9 +3728,6 @@ rplinit(int argc, char *argv[], char *en free((*s_etat_processus).localisation); - pthread_mutex_destroy(&mutex_liste_threads); - pthread_mutex_destroy(&mutex_gestionnaires_signaux_atomique); - # ifndef SEMAPHORES_NOMMES sem_post(&semaphore_gestionnaires_signaux); sem_destroy(&semaphore_gestionnaires_signaux);