--- rpl/src/gestion_variables_partagees.c 2013/03/20 17:11:44 1.45 +++ rpl/src/gestion_variables_partagees.c 2013/03/23 16:14:39 1.46 @@ -449,6 +449,7 @@ recherche_variable_partagee(struct_proce { // Caractère hors de l'alphabet des variables + pthread_mutex_unlock(&((*l_variable_courante).mutex_feuille)); (*s_etat_processus).erreur_systeme = d_es_variable_introuvable; return(NULL); } @@ -456,6 +457,8 @@ recherche_variable_partagee(struct_proce if ((*l_variable_courante).noeuds[pointeur] == NULL) { // Le chemin de la variable candidate n'existe pas. + + pthread_mutex_unlock(&((*l_variable_courante).mutex_feuille)); (*s_etat_processus).erreur_systeme = d_es_variable_introuvable; return(NULL); } @@ -463,6 +466,7 @@ recherche_variable_partagee(struct_proce if (pthread_mutex_lock(&((*(*l_variable_courante).noeuds[pointeur]) .mutex_feuille)) != 0) { + pthread_mutex_unlock(&((*l_variable_courante).mutex_feuille)); (*s_etat_processus).erreur_systeme = d_es_processus; return(NULL); } @@ -479,7 +483,7 @@ recherche_variable_partagee(struct_proce if ((*l_variable_courante).feuille != NULL) { - // Il existe au moins une variable statique du nom requis. + // Il existe au moins une variable partagée du nom requis. l_element_courant = (*l_variable_courante).feuille; @@ -656,6 +660,8 @@ retrait_variable_partagee(struct_process liberation(s_etat_processus, (*(*l_element_a_supprimer).variable) .objet); free((*(*l_element_a_supprimer).variable).nom); + pthread_mutex_unlock(&((*(*l_element_a_supprimer).variable).mutex)); + pthread_mutex_destroy(&((*(*l_element_a_supprimer).variable).mutex)); free((*l_element_a_supprimer).variable); free(l_element_a_supprimer);