Diff for /rpl/src/instructions_d5.c between versions 1.162 and 1.174

version 1.162, 2018/05/30 09:27:34 version 1.174, 2021/03/13 12:50:42
Line 1 Line 1
 /*  /*
 ================================================================================  ================================================================================
   RPL/2 (R) version 4.1.29    RPL/2 (R) version 4.1.33
   Copyright (C) 1989-2018 Dr. BERTRAND Joël    Copyright (C) 1989-2021 Dr. BERTRAND Joël
   
   This file is part of RPL/2.    This file is part of RPL/2.
   
Line 1306  instruction_detach(struct_processus *s_e Line 1306  instruction_detach(struct_processus *s_e
         pthread_mutexattr_destroy(&attributs_mutex);          pthread_mutexattr_destroy(&attributs_mutex);
   
         pthread_mutexattr_init(&attributs_mutex);          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);
   
           pthread_mutexattr_init(&attributs_mutex);
         pthread_mutexattr_settype(&attributs_mutex, PTHREAD_MUTEX_NORMAL);          pthread_mutexattr_settype(&attributs_mutex, PTHREAD_MUTEX_NORMAL);
         pthread_mutex_init(&((*s_etat_processus).mutex_pile_processus),          pthread_mutex_init(&((*s_etat_processus).mutex_pile_processus),
                 &attributs_mutex);                  &attributs_mutex);
Line 1321  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 2243  instruction_detach(struct_processus *s_e Line 2253  instruction_detach(struct_processus *s_e
                 {                  {
                     if ((*s_etat_processus).var_volatile_alarme != 0)                      if ((*s_etat_processus).var_volatile_alarme != 0)
                     {                      {
                         envoi_signal_thread((*(*((struct_processus_fils *)                          envoi_signal_thread(s_etat_processus,
                                   (*(*((struct_processus_fils *)
                                 (*(*l_element_courant).donnee).objet)).thread)                                  (*(*l_element_courant).donnee).objet)).thread)
                                 .tid, rpl_sigurg);                                  .tid, rpl_sigurg);
                     }                      }
Line 2251  instruction_detach(struct_processus *s_e Line 2262  instruction_detach(struct_processus *s_e
                     {                      {
                         if ((*s_etat_processus).arret_depuis_abort == -1)                          if ((*s_etat_processus).arret_depuis_abort == -1)
                         {                          {
                             envoi_signal_thread((*(*((struct_processus_fils *)                              envoi_signal_thread(s_etat_processus,
                                       (*(*((struct_processus_fils *)
                                     (*(*l_element_courant).donnee).objet))                                      (*(*l_element_courant).donnee).objet))
                                     .thread).tid, rpl_sigabort);                                      .thread).tid, rpl_sigabort);
                         }                          }
                         else                          else
                         {                          {
                             envoi_signal_thread((*(*((struct_processus_fils *)                              envoi_signal_thread(s_etat_processus,
                                       (*(*((struct_processus_fils *)
                                     (*(*l_element_courant).donnee).objet))                                      (*(*l_element_courant).donnee).objet))
                                     .thread).tid, rpl_sigstop);                                      .thread).tid, rpl_sigstop);
                         }                          }
Line 2303  instruction_detach(struct_processus *s_e Line 2316  instruction_detach(struct_processus *s_e
                     (*(*((struct_processus_fils *) (*(*l_element_courant)                      (*(*((struct_processus_fils *) (*(*l_element_courant)
                             .donnee).objet)).thread).nombre_objets_dans_pipe--;                              .donnee).objet)).thread).nombre_objets_dans_pipe--;
   
                       if (pthread_mutex_lock(&mutex_sigaction) != 0)
                       {
                           destruction_queue_signaux(s_etat_processus);
                           (*s_etat_processus).erreur_systeme = d_es_processus;
                           exit(EXIT_FAILURE);
                       }
   
                     action.sa_handler = SIG_IGN;                      action.sa_handler = SIG_IGN;
                     action.sa_flags = SA_ONSTACK;                      action.sa_flags = 0;
   
                     if (sigaction(SIGPIPE, &action, &registre) != 0)                      if (sigaction(SIGPIPE, &action, &registre) != 0)
                     {                      {
                         pthread_mutex_unlock(&((*s_etat_processus)                          pthread_mutex_unlock(&((*s_etat_processus)
                                 .mutex_pile_processus));                                  .mutex_pile_processus));
                           pthread_mutex_unlock(&mutex_sigaction);
   
                         if (registre_stop == 0)                          if (registre_stop == 0)
                         {                          {
Line 2363  instruction_detach(struct_processus *s_e Line 2384  instruction_detach(struct_processus *s_e
                     {                      {
                         destruction_queue_signaux(s_etat_processus);                          destruction_queue_signaux(s_etat_processus);
   
                           pthread_mutex_unlock(&mutex_sigaction);
                         pthread_mutex_unlock(&((*s_etat_processus)                          pthread_mutex_unlock(&((*s_etat_processus)
                                 .mutex_pile_processus));                                  .mutex_pile_processus));
                         (*s_etat_processus).erreur_systeme = d_es_signal;                          (*s_etat_processus).erreur_systeme = d_es_signal;
                         exit(EXIT_FAILURE);                          exit(EXIT_FAILURE);
                     }                      }
   
                       if (pthread_mutex_unlock(&mutex_sigaction) != 0)
                       {
                           destruction_queue_signaux(s_etat_processus);
                           pthread_mutex_unlock(&((*s_etat_processus)
                                   .mutex_pile_processus));
                           (*s_etat_processus).erreur_systeme = d_es_processus;
                           exit(EXIT_FAILURE);
                       }
                 }                  }
             }              }
   
Line 2724  instruction_detach(struct_processus *s_e Line 2755  instruction_detach(struct_processus *s_e
         attente.tv_sec = 0;          attente.tv_sec = 0;
         attente.tv_nsec = GRANULARITE_us * 1000;          attente.tv_nsec = GRANULARITE_us * 1000;
   
         while(nombre_thread_surveillance_processus != 0)          pthread_mutex_lock(&((*s_etat_processus).mutex_pile_processus));
   
           while(nombre_threads_surveillance_processus != 0)
         {          {
               pthread_mutex_unlock(&((*s_etat_processus).mutex_pile_processus));
             nanosleep(&attente, NULL);              nanosleep(&attente, NULL);
             INCR_GRANULARITE(attente.tv_nsec);              INCR_GRANULARITE(attente.tv_nsec);
               pthread_mutex_lock(&((*s_etat_processus).mutex_pile_processus));
         }          }
   
           pthread_mutex_unlock(&((*s_etat_processus).mutex_pile_processus));
   
         closelog();          closelog();
   
         retrait_thread(s_etat_processus);          retrait_thread(s_etat_processus);
Line 2780  instruction_detach(struct_processus *s_e Line 2817  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));
Line 2797  instruction_detach(struct_processus *s_e Line 2835  instruction_detach(struct_processus *s_e
         analyse_post_mortem();          analyse_post_mortem();
 #       endif  #       endif
   
           pthread_mutex_destroy(&mutex_sigaction);
         exit(EXIT_SUCCESS);          exit(EXIT_SUCCESS);
     }      }
     else      else
     {      {
           deverrouillage_threads_concurrents(s_etat_processus);
         (*s_etat_processus).erreur_systeme = d_es_processus;          (*s_etat_processus).erreur_systeme = d_es_processus;
         return;          return;
     }      }

Removed from v.1.162  
changed lines
  Added in v.1.174


CVSweb interface <joel.bertrand@systella.fr>