--- rpl/src/instructions_d5.c 2016/03/09 22:11:27 1.141 +++ rpl/src/instructions_d5.c 2016/03/15 16:31:15 1.142 @@ -1122,7 +1122,6 @@ instruction_detach(struct_processus *s_e { // On ne déverrouille les threads concurrents que dans le processus // père. Dans le fils, les valeurs sont non initialisées. -uprintf("PID=%d\n", getpid()); deverrouillage_threads_concurrents(s_etat_processus); } @@ -1290,14 +1289,13 @@ uprintf("PID=%d\n", getpid()); */ pthread_mutex_destroy(&mutex_liste_variables_partagees); + pthread_mutex_destroy(&mutex_liste_threads); pthread_mutexattr_init(&attributs_mutex); pthread_mutexattr_settype(&attributs_mutex, PTHREAD_MUTEX_RECURSIVE); pthread_mutex_init(&mutex_liste_variables_partagees, &attributs_mutex); pthread_mutexattr_destroy(&attributs_mutex); - pthread_mutex_destroy(&mutex_liste_threads); - pthread_mutexattr_init(&attributs_mutex); pthread_mutexattr_settype(&attributs_mutex, PTHREAD_MUTEX_RECURSIVE); pthread_mutex_init(&mutex_liste_threads, &attributs_mutex); @@ -2198,14 +2196,6 @@ uprintf("PID=%d\n", getpid()); } } - close((*s_argument_thread).pipe_erreurs[1]); - close((*s_argument_thread).pipe_interruptions[1]); - close((*s_argument_thread).pipe_nombre_elements_attente[1]); - close((*s_argument_thread).pipe_objets[1]); - close((*s_argument_thread).pipe_injections[0]); - close((*s_argument_thread).pipe_nombre_injections[0]); - close((*s_argument_thread).pipe_acquittement[0]); - l_element_courant = (*s_etat_processus).s_fichiers; while(l_element_courant != NULL) @@ -2768,8 +2758,6 @@ uprintf("PID=%d\n", getpid()); l_element_courant = l_element_suivant; } - free((*s_etat_processus).chemin_fichiers_temporaires); - if ((*s_etat_processus).debug == d_vrai) if (((*s_etat_processus).type_debug & d_debug_processus) != 0) @@ -2823,6 +2811,14 @@ uprintf("PID=%d\n", getpid()); closelog(); + close((*s_argument_thread).pipe_erreurs[1]); + close((*s_argument_thread).pipe_interruptions[1]); + close((*s_argument_thread).pipe_nombre_elements_attente[1]); + close((*s_argument_thread).pipe_objets[1]); + close((*s_argument_thread).pipe_injections[0]); + close((*s_argument_thread).pipe_nombre_injections[0]); + close((*s_argument_thread).pipe_acquittement[0]); + retrait_thread(s_etat_processus); pthread_mutex_destroy(&((*s_etat_processus).mutex_pile_processus)); @@ -2841,17 +2837,18 @@ uprintf("PID=%d\n", getpid()); pthread_self(), SEM_FORK); # endif - free((*s_etat_processus).localisation); - free(s_argument_thread); - clear_history(); - destruction_queue_signaux(s_etat_processus); liberation_contexte_cas(s_etat_processus); - arret_thread_signaux(s_etat_processus); + destruction_queue_signaux(s_etat_processus); + liberation_allocateur(s_etat_processus); liberation_allocateur_buffer(s_etat_processus); pthread_mutex_destroy(&((*s_etat_processus).mutex_allocation_buffer)); + + free((*s_etat_processus).localisation); + free((*s_etat_processus).chemin_fichiers_temporaires); + free(s_argument_thread); sys_free(s_etat_processus); # ifdef DEBUG_MEMOIRE