Diff for /rpl/src/instructions_d5.c between versions 1.169 and 1.177

version 1.169, 2019/02/11 09:45:49 version 1.177, 2023/08/08 13:33:09
Line 1 Line 1
 /*  /*
 ================================================================================  ================================================================================
   RPL/2 (R) version 4.1.31    RPL/2 (R) version 4.1.35
   Copyright (C) 1989-2019 Dr. BERTRAND Joël    Copyright (C) 1989-2023 Dr. BERTRAND Joël
   
   This file is part of RPL/2.    This file is part of RPL/2.
   
Line 1307  instruction_detach(struct_processus *s_e Line 1307  instruction_detach(struct_processus *s_e
   
         pthread_mutexattr_init(&attributs_mutex);          pthread_mutexattr_init(&attributs_mutex);
         pthread_mutexattr_settype(&attributs_mutex, PTHREAD_MUTEX_RECURSIVE);          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_mutex_init(&mutex_sigaction, &attributs_mutex);
         pthread_mutexattr_destroy(&attributs_mutex);          pthread_mutexattr_destroy(&attributs_mutex);
   
Line 1326  instruction_detach(struct_processus *s_e Line 1331  instruction_detach(struct_processus *s_e
         creation_queue_signaux(s_etat_processus);          creation_queue_signaux(s_etat_processus);
   
         routine_recursive = 0;          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_lecture = 0;
         (*s_etat_processus).pointeur_signal_ecriture = 0;          (*s_etat_processus).pointeur_signal_ecriture = 0;
Line 1818  instruction_detach(struct_processus *s_e Line 1823  instruction_detach(struct_processus *s_e
         {          {
             l_element_suivant = (*l_element_courant).suivant;              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 *)              fclose((*((struct_descripteur_fichier *)
                     (*l_element_courant).donnee)).descripteur_c);                      (*l_element_courant).donnee)).descripteur_c);
   
Line 1827  instruction_detach(struct_processus *s_e Line 1836  instruction_detach(struct_processus *s_e
                 sqlite3_close((*((struct_descripteur_fichier *)                  sqlite3_close((*((struct_descripteur_fichier *)
                         (*l_element_courant).donnee)).descripteur_sqlite);                          (*l_element_courant).donnee)).descripteur_sqlite);
             }              }
               */
   
             free((*((struct_descripteur_fichier *) (*l_element_courant)              free((*((struct_descripteur_fichier *) (*l_element_courant)
                     .donnee)).nom);                      .donnee)).nom);
Line 2439  instruction_detach(struct_processus *s_e Line 2449  instruction_detach(struct_processus *s_e
         {          {
             l_element_suivant = (*l_element_courant).suivant;              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))              if (((*((struct_socket *) (*(*l_element_courant).donnee).objet))
                     .pid == getpid()) && (pthread_equal((*((struct_socket *)                      .pid == getpid()) && (pthread_equal((*((struct_socket *)
                     (*(*l_element_courant).donnee).objet)).tid, pthread_self())                      (*(*l_element_courant).donnee).objet)).tid, pthread_self())
                     != 0))                      != 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))                  if ((*((struct_socket *) (*(*l_element_courant).donnee).objet))
                         .effacement == 'Y')                          .effacement == 'Y')
                 {                  {
Line 2752  instruction_detach(struct_processus *s_e Line 2762  instruction_detach(struct_processus *s_e
   
         pthread_mutex_lock(&((*s_etat_processus).mutex_pile_processus));          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));              pthread_mutex_unlock(&((*s_etat_processus).mutex_pile_processus));
             nanosleep(&attente, NULL);              nanosleep(&attente, NULL);
Line 2812  instruction_detach(struct_processus *s_e Line 2822  instruction_detach(struct_processus *s_e
   
         destruction_queue_signaux(s_etat_processus);          destruction_queue_signaux(s_etat_processus);
         pthread_mutex_destroy(&mutex_liste_threads);          pthread_mutex_destroy(&mutex_liste_threads);
           pthread_mutex_destroy(&mutex_liste_threads_surveillance);
   
 #       ifndef SEMAPHORES_NOMMES  #       ifndef SEMAPHORES_NOMMES
         sem_post(&((*s_etat_processus).semaphore_fork));          sem_post(&((*s_etat_processus).semaphore_fork));

Removed from v.1.169  
changed lines
  Added in v.1.177


CVSweb interface <joel.bertrand@systella.fr>