--- rpl/src/instructions_d5.c 2010/04/29 07:30:57 1.17 +++ rpl/src/instructions_d5.c 2010/05/19 09:22:34 1.21 @@ -1296,6 +1296,10 @@ instruction_detach(struct_processus *s_e * Processus fils */ +# ifdef DEBUG_MEMOIRE + debug_memoire_reinitialisation(); +# endif + # ifndef SEMAPHORES_NOMMES sem_post(&semaphore_gestionnaires_signaux); sem_destroy(&semaphore_gestionnaires_signaux); @@ -1830,6 +1834,12 @@ instruction_detach(struct_processus *s_e * Destruction des piles de connecteurs SQL */ +/* +================================================================================ + À noter : on ne ferme pas la connexion car la conséquence immédiate est + une destruction de l'objet pour le processus père. +================================================================================ + l_element_courant = (*s_etat_processus).s_connecteurs_sql; while(l_element_courant != NULL) @@ -1840,6 +1850,9 @@ instruction_detach(struct_processus *s_e liberation(s_etat_processus, (*l_element_courant).donnee); l_element_courant = l_element_suivant; } +*/ + + (*s_etat_processus).s_connecteurs_sql = NULL; /* * On ne détruit pas les sockets car il faut utiliser DETACH @@ -2630,6 +2643,8 @@ instruction_detach(struct_processus *s_e liberation(s_etat_processus, s_objet); # ifndef Cygwin + (*s_etat_processus).pile_signal.ss_flags = SS_DISABLE; + sigaltstack(&((*s_etat_processus).pile_signal), NULL); free((*s_etat_processus).pile_signal.ss_sp); # endif @@ -2685,7 +2700,6 @@ instruction_detach(struct_processus *s_e # endif free((*s_etat_processus).localisation); - free(s_etat_processus); free(s_argument_thread); # ifndef SEMAPHORES_NOMMES @@ -2704,8 +2718,11 @@ instruction_detach(struct_processus *s_e clear_history(); + free(s_etat_processus); + # ifdef DEBUG_MEMOIRE - debug_memoire_verification(s_etat_processus); + debug_memoire_verification(); + analyse_post_mortem(); # endif exit(EXIT_SUCCESS);