--- rpl/src/instructions_d5.c 2012/10/14 21:37:10 1.96 +++ rpl/src/instructions_d5.c 2012/12/13 16:59:41 1.97 @@ -934,26 +934,12 @@ instruction_detach(struct_processus *s_e if ((*(*s_etat_processus).pointeur_variable_courante).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, (*(*s_etat_processus).pointeur_variable_courante).nom, (*(*s_etat_processus).pointeur_variable_courante) .variable_partagee, (*(*s_etat_processus) .pointeur_variable_courante).origine) == d_faux) { - if (pthread_mutex_unlock(&((*(*s_etat_processus) - .s_liste_variables_partagees).mutex)) != 0) - { - (*s_etat_processus).erreur_systeme = d_es_processus; - return; - } - liberation(s_etat_processus, s_objet); (*s_etat_processus).erreur_systeme = d_es; @@ -962,16 +948,14 @@ instruction_detach(struct_processus *s_e return; } - if (((*(*(*s_etat_processus).s_liste_variables_partagees) - .table[(*(*s_etat_processus) - .s_liste_variables_partagees).position_variable].objet) - .type != RPN) && ((*(*(*s_etat_processus) - .s_liste_variables_partagees).table - [(*(*s_etat_processus).s_liste_variables_partagees) - .position_variable].objet).type != ADR)) + if (((*(*(*s_etat_processus) + .pointeur_variable_partagee_courante).objet).type + == RPN) && ((*(*(*s_etat_processus) + .pointeur_variable_partagee_courante).objet).type + == ADR)) { 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; @@ -985,12 +969,12 @@ instruction_detach(struct_processus *s_e } if ((s_copie = 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; @@ -1005,7 +989,7 @@ instruction_detach(struct_processus *s_e 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; @@ -1384,14 +1368,6 @@ instruction_detach(struct_processus *s_e (*s_etat_processus).liste_mutexes = NULL; liberation_threads(s_etat_processus); - - (*(*s_etat_processus).s_liste_variables_partagees) - .table = NULL; - (*(*s_etat_processus).s_liste_variables_partagees) - .nombre_variables = 0; - (*(*s_etat_processus).s_liste_variables_partagees) - .nombre_variables_allouees = 0; - insertion_thread(s_etat_processus, d_vrai); // Envoi d'une donnée pour signaler le démarrage du processus au thread @@ -2622,30 +2598,12 @@ instruction_detach(struct_processus *s_e (*s_etat_processus).instruction_derniere_erreur = NULL; } + liberation_arbre_variables_partagees(s_etat_processus, + (*s_etat_processus).s_arbre_variables); liberation_arbre_variables(s_etat_processus, (*s_etat_processus).s_arbre_variables, d_vrai); free((*s_etat_processus).pointeurs_caracteres_variables); - for(i = 0; i < (*(*s_etat_processus).s_liste_variables_partagees) - .nombre_variables; i++) - { - liberation(s_etat_processus, - (*(*s_etat_processus).s_liste_variables_partagees) - .table[i].objet); - free((*(*s_etat_processus).s_liste_variables_partagees) - .table[i].nom); - } - - if ((*(*s_etat_processus).s_liste_variables_partagees).table - != NULL) - { - free((struct_variable_partagee *) - (*(*s_etat_processus).s_liste_variables_partagees).table); - } - - pthread_mutex_destroy(&((*(*s_etat_processus) - .s_liste_variables_partagees).mutex)); - l_element_courant = (*s_etat_processus).l_base_pile; while(l_element_courant != NULL) {