--- rpl/src/instructions_d5.c 2019/02/11 09:45:49 1.169 +++ rpl/src/instructions_d5.c 2023/08/08 13:33:09 1.177 @@ -1,7 +1,7 @@ /* ================================================================================ - RPL/2 (R) version 4.1.31 - Copyright (C) 1989-2019 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. @@ -1307,6 +1307,11 @@ instruction_detach(struct_processus *s_e pthread_mutexattr_init(&attributs_mutex); pthread_mutexattr_settype(&attributs_mutex, PTHREAD_MUTEX_RECURSIVE); + pthread_mutex_init(&mutex_liste_threads_surveillance, &attributs_mutex); + pthread_mutexattr_destroy(&attributs_mutex); + + pthread_mutexattr_init(&attributs_mutex); + pthread_mutexattr_settype(&attributs_mutex, PTHREAD_MUTEX_RECURSIVE); pthread_mutex_init(&mutex_sigaction, &attributs_mutex); pthread_mutexattr_destroy(&attributs_mutex); @@ -1326,7 +1331,7 @@ instruction_detach(struct_processus *s_e creation_queue_signaux(s_etat_processus); routine_recursive = 0; - nombre_thread_surveillance_processus = 0; + nombre_threads_surveillance_processus = 0; (*s_etat_processus).pointeur_signal_lecture = 0; (*s_etat_processus).pointeur_signal_ecriture = 0; @@ -1818,6 +1823,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); @@ -1827,6 +1836,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); @@ -2439,21 +2449,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') { @@ -2752,7 +2762,7 @@ instruction_detach(struct_processus *s_e pthread_mutex_lock(&((*s_etat_processus).mutex_pile_processus)); - while(nombre_thread_surveillance_processus != 0) + while(nombre_threads_surveillance_processus != 0) { pthread_mutex_unlock(&((*s_etat_processus).mutex_pile_processus)); nanosleep(&attente, NULL); @@ -2812,6 +2822,7 @@ instruction_detach(struct_processus *s_e destruction_queue_signaux(s_etat_processus); pthread_mutex_destroy(&mutex_liste_threads); + pthread_mutex_destroy(&mutex_liste_threads_surveillance); # ifndef SEMAPHORES_NOMMES sem_post(&((*s_etat_processus).semaphore_fork));