--- rpl/src/instructions_d5.c 2010/06/08 10:22:37 1.26 +++ rpl/src/instructions_d5.c 2010/06/24 10:10:42 1.30 @@ -1,6 +1,6 @@ /* ================================================================================ - RPL/2 (R) version 4.0.16 + RPL/2 (R) version 4.0.17 Copyright (C) 1989-2010 Dr. BERTRAND Joël This file is part of RPL/2. @@ -1200,12 +1200,6 @@ instruction_detach(struct_processus *s_e (*(*((struct_processus_fils *) (*s_objet).objet)).thread) .nombre_references = 1; - if (pthread_mutex_unlock(&((*s_etat_processus).mutex)) != 0) - { - (*s_etat_processus).erreur_systeme = d_es_processus; - return; - } - /* * On copie l'objet plutôt que le pointeur car cet objet peut être * accédé depuis deux threads distincts et aboutir à un blocage lors @@ -1544,6 +1538,8 @@ instruction_detach(struct_processus *s_e exit(EXIT_FAILURE); } + pthread_mutex_trylock(&((*s_etat_processus).protection_liste_mutexes)); + if (pthread_mutex_unlock(&((*s_etat_processus) .protection_liste_mutexes)) != 0) { @@ -1758,6 +1754,8 @@ instruction_detach(struct_processus *s_e } free(s_argument_thread2); + free((*(*l_element_courant).donnee).objet); + free((*l_element_courant).donnee); } l_element_suivant = (*l_element_courant).suivant; @@ -2851,6 +2849,7 @@ instruction_detach(struct_processus *s_e retrait_thread(s_etat_processus); pthread_mutex_destroy(&((*s_etat_processus).mutex)); + pthread_mutex_destroy(&((*s_etat_processus).mutex_allocation)); pthread_mutex_destroy(&((*s_etat_processus).protection_liste_mutexes)); pthread_key_delete(semaphore_fork_processus_courant); @@ -2895,12 +2894,6 @@ instruction_detach(struct_processus *s_e { (*s_etat_processus).erreur_systeme = d_es_processus; return; - } - - if (pthread_mutex_lock(&((*s_etat_processus).mutex)) != 0) - { - (*s_etat_processus).erreur_systeme = d_es_processus; - return; } // Si le pid existe déjà dans la pile des processus, il s'agit forcement