--- rpl/src/instructions_d5.c 2020/01/10 11:15:44 1.173 +++ rpl/src/instructions_d5.c 2023/11/22 10:55:15 1.178 @@ -1,7 +1,7 @@ /* ================================================================================ - RPL/2 (R) version 4.1.32 - Copyright (C) 1989-2020 Dr. BERTRAND Joël + RPL/2 (R) version 4.1.35 + Copyright (C) 1989-2023 Dr. BERTRAND Joël This file is part of RPL/2. @@ -1343,7 +1343,6 @@ instruction_detach(struct_processus *s_e (*s_etat_processus).erreur_systeme = d_es_processus; } - close(pipe_initialisation_segment_signaux[0]); close(pipe_initialisation_segment_signaux[1]); if ((*s_etat_processus).debug == d_vrai) @@ -1823,6 +1822,10 @@ instruction_detach(struct_processus *s_e { l_element_suivant = (*l_element_courant).suivant; + // On ne détruit pas le descripteur sous prétexte + // d'avoir le fichier ou la socket fermée dans le processus père + + /* fclose((*((struct_descripteur_fichier *) (*l_element_courant).donnee)).descripteur_c); @@ -1832,6 +1835,7 @@ instruction_detach(struct_processus *s_e sqlite3_close((*((struct_descripteur_fichier *) (*l_element_courant).donnee)).descripteur_sqlite); } + */ free((*((struct_descripteur_fichier *) (*l_element_courant) .donnee)).nom); @@ -2444,21 +2448,21 @@ instruction_detach(struct_processus *s_e { l_element_suivant = (*l_element_courant).suivant; - if ((*((struct_socket *) (*(*l_element_courant).donnee) - .objet)).socket_connectee == d_vrai) - { - shutdown((*((struct_socket *) (*(*l_element_courant).donnee) - .objet)).socket, SHUT_RDWR); - } - - close((*((struct_socket *) (*(*l_element_courant).donnee) - .objet)).socket); - if (((*((struct_socket *) (*(*l_element_courant).donnee).objet)) .pid == getpid()) && (pthread_equal((*((struct_socket *) (*(*l_element_courant).donnee).objet)).tid, pthread_self()) != 0)) { + if ((*((struct_socket *) (*(*l_element_courant).donnee) + .objet)).socket_connectee == d_vrai) + { + shutdown((*((struct_socket *) (*(*l_element_courant).donnee) + .objet)).socket, SHUT_RDWR); + } + + close((*((struct_socket *) (*(*l_element_courant).donnee) + .objet)).socket); + if ((*((struct_socket *) (*(*l_element_courant).donnee).objet)) .effacement == 'Y') { @@ -2926,7 +2930,6 @@ instruction_detach(struct_processus *s_e } close(pipe_initialisation_segment_signaux[0]); - close(pipe_initialisation_segment_signaux[1]); // Le fils peut être présent sans être en attente du signal de départ.