Diff for /rpl/src/instructions_d5.c between versions 1.151 and 1.158

version 1.151, 2016/04/06 21:14:56 version 1.158, 2017/08/02 14:41:35
Line 1 Line 1
 /*  /*
 ================================================================================  ================================================================================
   RPL/2 (R) version 4.1.25    RPL/2 (R) version 4.1.27
   Copyright (C) 1989-2016 Dr. BERTRAND Joël    Copyright (C) 1989-2017 Dr. BERTRAND Joël
   
   This file is part of RPL/2.    This file is part of RPL/2.
   
Line 815  instruction_der(struct_processus *s_etat Line 815  instruction_der(struct_processus *s_etat
 void  void
 instruction_detach(struct_processus *s_etat_processus)  instruction_detach(struct_processus *s_etat_processus)
 {  {
   #ifndef EXPERIMENTAL_CODE
       printf("DETACH currently broken is replaced by SPAWN...\n");
       instruction_spawn(s_etat_processus);
   #else
     int                                 pipe_initialisation_segment_signaux[2];      int                                 pipe_initialisation_segment_signaux[2];
   
     logical1                            drapeau;      logical1                            drapeau;
Line 1088  instruction_detach(struct_processus *s_e Line 1092  instruction_detach(struct_processus *s_e
         return;          return;
     }      }
   
       verrouillage_threads_concurrents(s_etat_processus);
   
     if (pthread_mutex_lock(&mutex_liste_variables_partagees) != 0)      if (pthread_mutex_lock(&mutex_liste_variables_partagees) != 0)
     {      {
         (*s_etat_processus).erreur_systeme = d_es_processus;          (*s_etat_processus).erreur_systeme = d_es_processus;
         return;          return;
     }      }
   
     verrouillage_threads_concurrents(s_etat_processus);  
   
     if (pthread_mutex_lock(&((*s_etat_processus).mutex_allocation_buffer)) != 0)      if (pthread_mutex_lock(&((*s_etat_processus).mutex_allocation_buffer)) != 0)
     {      {
         (*s_etat_processus).erreur_systeme = d_es_processus;          (*s_etat_processus).erreur_systeme = d_es_processus;
Line 1289  instruction_detach(struct_processus *s_e Line 1293  instruction_detach(struct_processus *s_e
          */           */
   
         // EPERM          // EPERM
   #if 0
         pthread_mutex_destroy(&mutex_liste_variables_partagees);          pthread_mutex_destroy(&mutex_liste_variables_partagees);
         pthread_mutex_destroy(&mutex_liste_threads);          pthread_mutex_destroy(&mutex_liste_threads);
           pthread_mutex_destroy(&((*s_etat_processus).mutex_pile_processus);
           pthread_mutex_destroy(&((*s_etat_processus).mutex_allocation));
   #endif
   
         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);
Line 1302  instruction_detach(struct_processus *s_e Line 1310  instruction_detach(struct_processus *s_e
         pthread_mutex_init(&mutex_liste_threads, &attributs_mutex);          pthread_mutex_init(&mutex_liste_threads, &attributs_mutex);
         pthread_mutexattr_destroy(&attributs_mutex);          pthread_mutexattr_destroy(&attributs_mutex);
   
           pthread_mutexattr_init(&attributs_mutex);
           pthread_mutexattr_settype(&attributs_mutex, PTHREAD_MUTEX_NORMAL);
           pthread_mutex_init(&((*s_etat_processus).mutex_pile_processus),
                   &attributs_mutex);
           pthread_mutexattr_destroy(&attributs_mutex);
   
           pthread_mutexattr_init(&attributs_mutex);
           pthread_mutexattr_settype(&attributs_mutex, PTHREAD_MUTEX_NORMAL);
           pthread_mutex_init(&((*s_etat_processus).mutex_allocation),
                   &attributs_mutex);
           pthread_mutexattr_destroy(&attributs_mutex);
   
         liberation_queue_signaux(s_etat_processus);          liberation_queue_signaux(s_etat_processus);
         creation_queue_signaux(s_etat_processus);          creation_queue_signaux(s_etat_processus);
   
Line 1601  instruction_detach(struct_processus *s_e Line 1621  instruction_detach(struct_processus *s_e
   
         // Attente de la réception du signal rpl_sigstart.          // Attente de la réception du signal rpl_sigstart.
   
         for((*s_etat_processus).demarrage_fils = d_faux;;)          for((*s_etat_processus).demarrage_fils = d_faux;
                   (*s_etat_processus).demarrage_fils != d_vrai;
                   nanosleep(&attente, NULL))
         {          {
             scrutation_interruptions(s_etat_processus);              scrutation_interruptions(s_etat_processus);
   
             if ((*s_etat_processus).demarrage_fils == d_vrai)  
             {  
                 break;  
             }  
   
             nanosleep(&attente, NULL);  
         }          }
   
         (*s_etat_processus).niveau_initial = (*s_etat_processus).niveau_courant;          (*s_etat_processus).niveau_initial = (*s_etat_processus).niveau_courant;
Line 1916  instruction_detach(struct_processus *s_e Line 1931  instruction_detach(struct_processus *s_e
             l_element_courant = l_element_suivant;              l_element_courant = l_element_suivant;
         }          }
   
           (*s_etat_processus).s_fichiers = NULL;
   
         /*          /*
          * Destruction des piles de connecteurs SQL           * Destruction des piles de connecteurs SQL
          */           */
Line 1938  instruction_detach(struct_processus *s_e Line 1955  instruction_detach(struct_processus *s_e
             l_element_courant = l_element_suivant;              l_element_courant = l_element_suivant;
         }          }
   
         (*s_etat_processus).s_connecteurs_sql = NULL;  
   
         /*          /*
          * On ne détruit pas les sockets car il faut utiliser DETACH           * On ne détruit pas les sockets car il faut utiliser DETACH
          * pour traiter plusieurs connexions simultanées sur les sockets           * pour traiter plusieurs connexions simultanées sur les sockets
          */           */
   
         (*s_etat_processus).s_fichiers = NULL;          (*s_etat_processus).s_connecteurs_sql = NULL;
   
         if ((*s_etat_processus).debug == d_vrai)          if ((*s_etat_processus).debug == d_vrai)
         {          {
Line 2972  instruction_detach(struct_processus *s_e Line 2987  instruction_detach(struct_processus *s_e
     }      }
   
     return;      return;
   #endif
 }  }
   
 // vim: ts=4  // vim: ts=4

Removed from v.1.151  
changed lines
  Added in v.1.158


CVSweb interface <joel.bertrand@systella.fr>