--- rpl/src/instructions_d5.c 2010/05/25 18:09:44 1.23 +++ rpl/src/instructions_d5.c 2010/06/02 10:28:45 1.24 @@ -1277,25 +1277,13 @@ instruction_detach(struct_processus *s_e (*s_argument_thread).s_etat_processus = s_etat_processus; -# ifdef DEBUG_MEMOIRE - debug_memoire_verrouillage(); -# endif - if (pthread_create(&thread_surveillance, &attributs, surveillance_processus, s_argument_thread) != 0) { -# ifdef DEBUG_MEMOIRE - debug_memoire_deverrouillage(); -# endif - (*s_etat_processus).erreur_systeme = d_es_processus; return; } -# ifdef DEBUG_MEMOIRE - debug_memoire_deverrouillage(); -# endif - if (pthread_attr_destroy(&attributs) != 0) { (*s_etat_processus).erreur_systeme = d_es_processus; @@ -1656,8 +1644,29 @@ instruction_detach(struct_processus *s_e * Initialisation de la pile des processus */ + l_element_courant = (struct_liste_chainee *) + (*s_etat_processus).l_base_pile_processus; + + while(l_element_courant != NULL) + { + l_element_suivant = (*l_element_courant).suivant; + + if ((*((*(struct_processus_fils *) (*(*l_element_courant).donnee) + .objet)).thread).processus_detache == d_faux) + { + liberation(s_etat_processus, (*((*(struct_processus_fils *) + (*(*l_element_courant).donnee).objet)).thread) + .argument); + } + + free((*(*l_element_courant).donnee).objet); + free((*l_element_courant).donnee); + free(l_element_courant); + + l_element_courant = l_element_suivant; + } + (*s_etat_processus).l_base_pile_processus = NULL; - // Les données associées sont déjà effacées par liberation_thread(). /* * Initialisation de la pile système @@ -1847,6 +1856,7 @@ instruction_detach(struct_processus *s_e À 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; @@ -1854,11 +1864,10 @@ instruction_detach(struct_processus *s_e { l_element_suivant = (*l_element_courant).suivant; - sqlclose((*l_element_courant).donnee); +// sqlclose((*l_element_courant).donnee); liberation(s_etat_processus, (*l_element_courant).donnee); l_element_courant = l_element_suivant; } -*/ (*s_etat_processus).s_connecteurs_sql = NULL;