--- rpl/src/gestion_processus.c 2010/06/17 11:00:23 1.17 +++ rpl/src/gestion_processus.c 2010/06/19 15:54:51 1.19 @@ -1772,54 +1772,16 @@ surveillance_processus(void *argument) { (*s_etat_processus).l_base_pile_processus = (*l_element_courant).suivant; - - (*(*((struct_processus_fils *) (*(*l_element_courant) - .donnee).objet)).thread).nombre_references--; - - // Cette référence ne peut être nulle car l'objet est encore - // référencé par la liste des threads de surveillance. - - BUG((*(*((struct_processus_fils *) (*(*l_element_courant) - .donnee).objet)).thread).nombre_references <= 0, - uprintf("(*(*((struct_processus_fils *) " - "(*(*l_element_courant).donnee).objet)).thread)" - ".nombre_references = %d\n", - (*(*((struct_processus_fils *) - (*(*l_element_courant).donnee).objet)).thread) - .nombre_references)); - - free((*(*l_element_courant).donnee).objet); - free((*l_element_courant).donnee); - free(l_element_courant); - - l_element_courant = (struct_liste_chainee *) - (*s_etat_processus).l_base_pile_processus; } else { (*l_element_precedent).suivant = (*l_element_courant).suivant; - - (*(*((struct_processus_fils *) (*(*l_element_courant) - .donnee).objet)).thread).nombre_references--; - - // Cette référence ne peut être nulle car l'objet est encore - // référencé par la liste des threads de surveillance. - - BUG((*(*((struct_processus_fils *) (*(*l_element_courant) - .donnee).objet)).thread).nombre_references <= 0, - uprintf("(*(*((struct_processus_fils *) " - "(*(*l_element_courant).donnee).objet)).thread)" - ".nombre_references = %d\n", - (*(*((struct_processus_fils *) - (*(*l_element_courant).donnee).objet)).thread) - .nombre_references)); - - free((*(*l_element_courant).donnee).objet); - free((*l_element_courant).donnee); - free(l_element_courant); } + liberation(s_etat_processus, (*l_element_courant).donnee); + free(l_element_courant); + break; } else