Diff for /rpl/src/instructions_d5.c between versions 1.111 and 1.112

version 1.111, 2013/05/28 22:09:55 version 1.112, 2013/05/30 09:41:41
Line 1081  instruction_detach(struct_processus *s_e Line 1081  instruction_detach(struct_processus *s_e
      * Le mutex suivant permet de copier un contexte propre.       * Le mutex suivant permet de copier un contexte propre.
      */       */
   
     if (pthread_mutex_lock(&((*s_etat_processus).mutex)) != 0)      if (pthread_mutex_lock(&((*s_etat_processus).mutex_pile_processus)) != 0)
     {      {
         (*s_etat_processus).erreur_systeme = d_es_processus;          (*s_etat_processus).erreur_systeme = d_es_processus;
         return;          return;
Line 1365  instruction_detach(struct_processus *s_e Line 1365  instruction_detach(struct_processus *s_e
                 (*s_argument_thread).pipe_nombre_elements_attente[1],                  (*s_argument_thread).pipe_nombre_elements_attente[1],
                 &caractere, sizeof(caractere)) != sizeof(caractere))                  &caractere, sizeof(caractere)) != sizeof(caractere))
         {          {
             pthread_mutex_unlock(&((*s_etat_processus).mutex));              pthread_mutex_unlock(&((*s_etat_processus).mutex_pile_processus));
             (*s_etat_processus).erreur_systeme = d_es_processus;              (*s_etat_processus).erreur_systeme = d_es_processus;
   
             while((longueur_ecriture = write_atomic(s_etat_processus,              while((longueur_ecriture = write_atomic(s_etat_processus,
Line 1407  instruction_detach(struct_processus *s_e Line 1407  instruction_detach(struct_processus *s_e
         pthread_mutex_init(&mutex_sections_critiques, &attributs_mutex);          pthread_mutex_init(&mutex_sections_critiques, &attributs_mutex);
         pthread_mutexattr_destroy(&attributs_mutex);          pthread_mutexattr_destroy(&attributs_mutex);
   
         if (pthread_mutex_unlock(&((*s_etat_processus).mutex)) != 0)          if (pthread_mutex_unlock(&((*s_etat_processus).mutex_pile_processus))
                   != 0)
         {          {
             (*s_etat_processus).erreur_systeme = d_es_processus;              (*s_etat_processus).erreur_systeme = d_es_processus;
   
Line 1476  instruction_detach(struct_processus *s_e Line 1477  instruction_detach(struct_processus *s_e
             exit(EXIT_FAILURE);              exit(EXIT_FAILURE);
         }          }
   
           pthread_mutex_trylock(&((*s_etat_processus).mutex_signaux));
   
           if (pthread_mutex_unlock(&((*s_etat_processus).mutex_signaux))
                   != 0)
           {
               (*s_etat_processus).erreur_systeme = d_es_processus;
   
               caractere = 0;
   
               while((longueur_ecriture = write_atomic(s_etat_processus,
                       (*s_argument_thread).pipe_nombre_elements_attente[1],
                       &caractere, sizeof(caractere))) != sizeof(caractere))
               {
                   if (longueur_ecriture == -1)
                   {
                       break;
                   }
               }
   
               destruction_queue_signaux(s_etat_processus);
               BUG(1, uprintf("Process management error line %d\n", __LINE__));
               exit(EXIT_FAILURE);
           }
   
         if ((*s_etat_processus).evaluation_expression_compilee == 'N')          if ((*s_etat_processus).evaluation_expression_compilee == 'N')
         {          {
             free((*s_etat_processus).instruction_courante);              free((*s_etat_processus).instruction_courante);
Line 1592  instruction_detach(struct_processus *s_e Line 1617  instruction_detach(struct_processus *s_e
          * par liberation_threads().           * par liberation_threads().
          */           */
   
         if (pthread_mutex_lock(&((*s_etat_processus).mutex)) != 0)          if (pthread_mutex_lock(&((*s_etat_processus).mutex_pile_processus))
                   != 0)
         {          {
             (*s_etat_processus).erreur_systeme = d_es;              (*s_etat_processus).erreur_systeme = d_es;
   
Line 1661  instruction_detach(struct_processus *s_e Line 1687  instruction_detach(struct_processus *s_e
   
         (*s_etat_processus).l_base_pile_processus = NULL;          (*s_etat_processus).l_base_pile_processus = NULL;
   
         if (pthread_mutex_unlock(&((*s_etat_processus).mutex)) != 0)          if (pthread_mutex_unlock(&((*s_etat_processus).mutex_pile_processus))
                   != 0)
         {          {
             (*s_etat_processus).erreur_systeme = d_es;              (*s_etat_processus).erreur_systeme = d_es;
   
Line 2167  instruction_detach(struct_processus *s_e Line 2194  instruction_detach(struct_processus *s_e
             l_element_courant = l_element_suivant;              l_element_courant = l_element_suivant;
         }          }
   
         pthread_mutex_lock(&((*s_etat_processus).mutex));          pthread_mutex_lock(&((*s_etat_processus).mutex_pile_processus));
   
         l_element_courant = (struct_liste_chainee *)          l_element_courant = (struct_liste_chainee *)
                 (*s_etat_processus).l_base_pile_processus;                  (*s_etat_processus).l_base_pile_processus;
Line 2330  instruction_detach(struct_processus *s_e Line 2357  instruction_detach(struct_processus *s_e
   
                     if (sigaction(SIGPIPE, &action, &registre) != 0)                      if (sigaction(SIGPIPE, &action, &registre) != 0)
                     {                      {
                         pthread_mutex_unlock(&((*s_etat_processus).mutex));                          pthread_mutex_unlock(&((*s_etat_processus)
                                   .mutex_pile_processus));
   
                         if (registre_stop == 0)                          if (registre_stop == 0)
                         {                          {
Line 2384  instruction_detach(struct_processus *s_e Line 2412  instruction_detach(struct_processus *s_e
                     {                      {
                         destruction_queue_signaux(s_etat_processus);                          destruction_queue_signaux(s_etat_processus);
   
                         pthread_mutex_unlock(&((*s_etat_processus).mutex));                          pthread_mutex_unlock(&((*s_etat_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);
                     }                      }
Line 2396  instruction_detach(struct_processus *s_e Line 2425  instruction_detach(struct_processus *s_e
             {              {
                 destruction_queue_signaux(s_etat_processus);                  destruction_queue_signaux(s_etat_processus);
   
                 pthread_mutex_unlock(&((*s_etat_processus).mutex));                  pthread_mutex_unlock(&((*s_etat_processus)
                           .mutex_pile_processus));
                 (*s_etat_processus).erreur_systeme = d_es_processus;                  (*s_etat_processus).erreur_systeme = d_es_processus;
                 exit(EXIT_FAILURE);                  exit(EXIT_FAILURE);
             }              }
Line 2411  instruction_detach(struct_processus *s_e Line 2441  instruction_detach(struct_processus *s_e
             {              {
                 destruction_queue_signaux(s_etat_processus);                  destruction_queue_signaux(s_etat_processus);
   
                 pthread_mutex_unlock(&((*s_etat_processus).mutex));                  pthread_mutex_unlock(&((*s_etat_processus)
                           .mutex_pile_processus));
                 (*s_etat_processus).erreur_systeme = d_es_processus;                  (*s_etat_processus).erreur_systeme = d_es_processus;
                 exit(EXIT_FAILURE);                  exit(EXIT_FAILURE);
             }              }
   
             pthread_mutex_unlock(&((*s_etat_processus).mutex));              pthread_mutex_unlock(&((*s_etat_processus).mutex_pile_processus));
             nanosleep(&attente, NULL);              nanosleep(&attente, NULL);
             pthread_mutex_lock(&((*s_etat_processus).mutex));              pthread_mutex_lock(&((*s_etat_processus).mutex_pile_processus));
   
             scrutation_interruptions(s_etat_processus);              scrutation_interruptions(s_etat_processus);
         }          }
   
         pthread_mutex_unlock(&((*s_etat_processus).mutex));          pthread_mutex_unlock(&((*s_etat_processus).mutex_pile_processus));
   
         l_element_courant = (*s_etat_processus).s_sockets;          l_element_courant = (*s_etat_processus).s_sockets;
   
Line 2746  instruction_detach(struct_processus *s_e Line 2777  instruction_detach(struct_processus *s_e
         liberation_allocateur(s_etat_processus);          liberation_allocateur(s_etat_processus);
         retrait_thread(s_etat_processus);          retrait_thread(s_etat_processus);
   
         pthread_mutex_destroy(&((*s_etat_processus).mutex));          pthread_mutex_destroy(&((*s_etat_processus).mutex_pile_processus));
         pthread_mutex_destroy(&((*s_etat_processus).mutex_allocation));          pthread_mutex_destroy(&((*s_etat_processus).mutex_allocation));
         pthread_mutex_destroy(&((*s_etat_processus).mutex_interruptions));          pthread_mutex_destroy(&((*s_etat_processus).mutex_interruptions));
           pthread_mutex_destroy(&((*s_etat_processus).mutex_signaux));
         pthread_mutex_destroy(&((*s_etat_processus).protection_liste_mutexes));          pthread_mutex_destroy(&((*s_etat_processus).protection_liste_mutexes));
         pthread_mutex_destroy(&mutex_sections_critiques);          pthread_mutex_destroy(&mutex_sections_critiques);
   
Line 2807  instruction_detach(struct_processus *s_e Line 2839  instruction_detach(struct_processus *s_e
                         (*(*l_element_courant).donnee).objet)).thread).pid ==                          (*(*l_element_courant).donnee).objet)).thread).pid ==
                         (*s_argument_thread).pid)                          (*s_argument_thread).pid)
                 {                  {
                     if (pthread_mutex_unlock(&((*s_etat_processus).mutex)) != 0)                      if (pthread_mutex_unlock(&((*s_etat_processus)
                               .mutex_pile_processus)) != 0)
                     {                      {
                         (*s_etat_processus).erreur_systeme = d_es_processus;                          (*s_etat_processus).erreur_systeme = d_es_processus;
                         return;                          return;
Line 2816  instruction_detach(struct_processus *s_e Line 2849  instruction_detach(struct_processus *s_e
                     nanosleep(&attente, NULL);                      nanosleep(&attente, NULL);
                     INCR_GRANULARITE(attente.tv_nsec);                      INCR_GRANULARITE(attente.tv_nsec);
   
                     if (pthread_mutex_lock(&((*s_etat_processus).mutex)) != 0)                      if (pthread_mutex_lock(&((*s_etat_processus)
                               .mutex_pile_processus)) != 0)
                     {                      {
                         (*s_etat_processus).erreur_systeme = d_es_processus;                          (*s_etat_processus).erreur_systeme = d_es_processus;
                         return;                          return;
Line 2836  instruction_detach(struct_processus *s_e Line 2870  instruction_detach(struct_processus *s_e
             (struct_liste_chainee **) &((*s_etat_processus)              (struct_liste_chainee **) &((*s_etat_processus)
             .l_base_pile_processus), s_objet_systeme) == d_erreur)              .l_base_pile_processus), s_objet_systeme) == d_erreur)
     {      {
         pthread_mutex_unlock(&((*s_etat_processus).mutex));          pthread_mutex_unlock(&((*s_etat_processus).mutex_pile_processus));
         return;          return;
     }      }
   
     if (empilement(s_etat_processus, &((*s_etat_processus).l_base_pile),      if (empilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
             s_objet) == d_erreur)              s_objet) == d_erreur)
     {      {
         pthread_mutex_unlock(&((*s_etat_processus).mutex));          pthread_mutex_unlock(&((*s_etat_processus).mutex_pile_processus));
         return;          return;
     }      }
   
Line 2870  instruction_detach(struct_processus *s_e Line 2904  instruction_detach(struct_processus *s_e
     if (envoi_signal_processus((*s_argument_thread).pid, rpl_sigstart) != 0)      if (envoi_signal_processus((*s_argument_thread).pid, rpl_sigstart) != 0)
     {      {
         (*s_etat_processus).erreur_systeme = d_es_processus;          (*s_etat_processus).erreur_systeme = d_es_processus;
         pthread_mutex_unlock(&((*s_etat_processus).mutex));          pthread_mutex_unlock(&((*s_etat_processus).mutex_pile_processus));
         return;          return;
     }      }
   
     if (pthread_mutex_unlock(&((*s_etat_processus).mutex)) != 0)      if (pthread_mutex_unlock(&((*s_etat_processus).mutex_pile_processus)) != 0)
     {      {
         (*s_etat_processus).erreur_systeme = d_es_processus;          (*s_etat_processus).erreur_systeme = d_es_processus;
         return;          return;

Removed from v.1.111  
changed lines
  Added in v.1.112


CVSweb interface <joel.bertrand@systella.fr>