Diff for /rpl/src/gestion_processus.c between versions 1.66 and 1.76

version 1.66, 2013/05/21 12:10:11 version 1.76, 2015/01/05 13:12:32
Line 1 Line 1
 /*  /*
 ================================================================================  ================================================================================
   RPL/2 (R) version 4.1.14    RPL/2 (R) version 4.1.19
   Copyright (C) 1989-2013 Dr. BERTRAND Joël    Copyright (C) 1989-2015 Dr. BERTRAND Joël
   
   This file is part of RPL/2.    This file is part of RPL/2.
   
Line 77  surveillance_processus(void *argument) Line 77  surveillance_processus(void *argument)
     s_argument_thread = argument;      s_argument_thread = argument;
     s_etat_processus = (*s_argument_thread).s_etat_processus;      s_etat_processus = (*s_argument_thread).s_etat_processus;
   
     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;
         BUG(1, uprintf("General mutex error!\n"));          BUG(1, uprintf("General mutex error!\n"));
Line 85  surveillance_processus(void *argument) Line 85  surveillance_processus(void *argument)
   
     insertion_thread_surveillance(s_etat_processus, s_argument_thread);      insertion_thread_surveillance(s_etat_processus, s_argument_thread);
   
     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;
         BUG(1, uprintf("General mutex error!\n"));          BUG(1, uprintf("General mutex error!\n"));
Line 176  surveillance_processus(void *argument) Line 176  surveillance_processus(void *argument)
                 // Un objet supplémentaire est dans le pipe correspondant                  // Un objet supplémentaire est dans le pipe correspondant
                 // au processus surveillé par ce thread.                  // au processus surveillé par ce thread.
   
                 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_processus_fils =                      (*s_etat_processus).erreur_systeme_processus_fils =
                             d_es_processus;                              d_es_processus;
Line 274  surveillance_processus(void *argument) Line 275  surveillance_processus(void *argument)
                             (*(*((struct_processus_fils *)                              (*(*((struct_processus_fils *)
                                     (*(*l_element_courant).donnee).objet))                                      (*(*l_element_courant).donnee).objet))
                                     .thread).nombre_interruptions_dans_pipe++;                                      .thread).nombre_interruptions_dans_pipe++;
   
                               if (pthread_mutex_lock(&((*s_etat_processus)
                                       .mutex_interruptions)) != 0)
                               {
                                   (*s_etat_processus).erreur_systeme =
                                           d_es_processus;
                               }
   
                             (*s_etat_processus)                              (*s_etat_processus)
                                     .nombre_interruptions_non_affectees++;                                      .nombre_interruptions_non_affectees++;
   
                               if (pthread_mutex_unlock(&((*s_etat_processus)
                                       .mutex_interruptions)) != 0)
                               {
                                   (*s_etat_processus).erreur_systeme =
                                           d_es_processus;
                               }
                         }                          }
   
                         if (pthread_mutex_unlock(                          if (pthread_mutex_unlock(
Line 364  surveillance_processus(void *argument) Line 380  surveillance_processus(void *argument)
                     }                      }
                 }                  }
   
                 if (pthread_mutex_unlock(&((*s_etat_processus).mutex))                  if (pthread_mutex_unlock(&((*s_etat_processus)
                         != 0)                          .mutex_pile_processus)) != 0)
                 {                  {
                     (*s_etat_processus).erreur_systeme_processus_fils =                      (*s_etat_processus).erreur_systeme_processus_fils =
                             d_es_processus;                              d_es_processus;
Line 415  surveillance_processus(void *argument) Line 431  surveillance_processus(void *argument)
                 // Un objet supplémentaire est dans le pipe correspondant                  // Un objet supplémentaire est dans le pipe correspondant
                 // au processus surveillé par ce thread.                  // au processus surveillé par ce thread.
   
                 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_processus_fils =                      (*s_etat_processus).erreur_systeme_processus_fils =
                             d_es_processus;                              d_es_processus;
Line 430  surveillance_processus(void *argument) Line 447  surveillance_processus(void *argument)
                             (*(*l_element_courant).donnee).objet))                              (*(*l_element_courant).donnee).objet))
                             .thread).processus_detache == d_vrai)                              .thread).processus_detache == d_vrai)
                     {                      {
                         l_element_courant = (*l_element_courant)                          l_element_courant = (*l_element_courant).suivant;
                                 .suivant;  
                         continue;                          continue;
                     }                      }
   
Line 516  surveillance_processus(void *argument) Line 532  surveillance_processus(void *argument)
                             (*(*((struct_processus_fils *)                              (*(*((struct_processus_fils *)
                                     (*(*l_element_courant).donnee).objet))                                      (*(*l_element_courant).donnee).objet))
                                     .thread).nombre_interruptions_dans_pipe++;                                      .thread).nombre_interruptions_dans_pipe++;
   
                               if (pthread_mutex_lock(&((*s_etat_processus)
                                       .mutex_interruptions)) != 0)
                               {
                                   (*s_etat_processus).erreur_systeme =
                                           d_es_processus;
                               }
   
                             (*s_etat_processus)                              (*s_etat_processus)
                                     .nombre_interruptions_non_affectees++;                                      .nombre_interruptions_non_affectees++;
   
                               if (pthread_mutex_unlock(&((*s_etat_processus)
                                       .mutex_interruptions)) != 0)
                               {
                                   (*s_etat_processus).erreur_systeme =
                                           d_es_processus;
                               }
                         }                          }
   
                         if (pthread_mutex_unlock(                          if (pthread_mutex_unlock(
Line 592  surveillance_processus(void *argument) Line 623  surveillance_processus(void *argument)
                             }                              }
                         }                          }
   
                           if (pthread_mutex_unlock(&((*s_etat_processus)
                                   .mutex_pile_processus)) != 0)
                           {
                               (*s_etat_processus).erreur_systeme_processus_fils =
                                       d_es_processus;
                           }
   
                         envoi_signal_thread((*s_argument_thread).thread_pere,                          envoi_signal_thread((*s_argument_thread).thread_pere,
                                 rpl_siginject);                                  rpl_siginject);
   
                           if (pthread_mutex_lock(&((*s_etat_processus)
                                   .mutex_pile_processus)) != 0)
                           {
                               (*s_etat_processus).erreur_systeme_processus_fils =
                                       d_es_processus;
                           }
   
                         break;                          break;
                     }                      }
   
Line 610  surveillance_processus(void *argument) Line 656  surveillance_processus(void *argument)
                     }                      }
                 }                  }
   
                 if (pthread_mutex_unlock(&((*s_etat_processus).mutex))                  if (pthread_mutex_unlock(&((*s_etat_processus)
                         != 0)                          .mutex_pile_processus)) != 0)
                 {                  {
                     (*s_etat_processus).erreur_systeme_processus_fils =                      (*s_etat_processus).erreur_systeme_processus_fils =
                             d_es_processus;                              d_es_processus;
Line 654  surveillance_processus(void *argument) Line 700  surveillance_processus(void *argument)
      * reste plus rien dans les tuyaux...       * reste plus rien dans les tuyaux...
      */       */
   
     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_processus_fils =          (*s_etat_processus).erreur_systeme_processus_fils =
                 d_es_processus;                  d_es_processus;
Line 790  surveillance_processus(void *argument) Line 836  surveillance_processus(void *argument)
                                         (*(*l_element_courant).donnee).objet))                                          (*(*l_element_courant).donnee).objet))
                                         .thread)                                          .thread)
                                         .nombre_interruptions_dans_pipe++;                                          .nombre_interruptions_dans_pipe++;
   
                                   if (pthread_mutex_lock(&((*s_etat_processus)
                                           .mutex_interruptions)) != 0)
                                   {
                                       (*s_etat_processus).erreur_systeme =
                                               d_es_processus;
                                   }
   
                                 (*s_etat_processus)                                  (*s_etat_processus)
                                         .nombre_interruptions_non_affectees++;                                          .nombre_interruptions_non_affectees++;
   
                                   if (pthread_mutex_unlock(&((*s_etat_processus)
                                           .mutex_interruptions)) != 0)
                                   {
                                       (*s_etat_processus).erreur_systeme =
                                               d_es_processus;
                                   }
                             }                              }
   
                             if (pthread_mutex_unlock(                              if (pthread_mutex_unlock(
Line 893  surveillance_processus(void *argument) Line 954  surveillance_processus(void *argument)
                                         (*(*l_element_courant).donnee).objet))                                          (*(*l_element_courant).donnee).objet))
                                         .thread)                                          .thread)
                                         .nombre_interruptions_dans_pipe++;                                          .nombre_interruptions_dans_pipe++;
   
                                   if (pthread_mutex_lock(&((*s_etat_processus)
                                           .mutex_interruptions)) != 0)
                                   {
                                       (*s_etat_processus).erreur_systeme =
                                               d_es_processus;
                                   }
   
                                 (*s_etat_processus)                                  (*s_etat_processus)
                                         .nombre_interruptions_non_affectees++;                                          .nombre_interruptions_non_affectees++;
   
                                   if (pthread_mutex_unlock(&((*s_etat_processus)
                                           .mutex_interruptions)) != 0)
                                   {
                                       (*s_etat_processus).erreur_systeme =
                                               d_es_processus;
                                   }
                             }                              }
   
                             if (pthread_mutex_unlock(                              if (pthread_mutex_unlock(
Line 915  surveillance_processus(void *argument) Line 991  surveillance_processus(void *argument)
             }              }
         }          }
   
         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_processus_fils =              (*s_etat_processus).erreur_systeme_processus_fils =
                     d_es_processus;                      d_es_processus;
Line 1009  surveillance_processus(void *argument) Line 1086  surveillance_processus(void *argument)
         (*s_etat_processus).erreur_systeme_processus_fils = d_es_processus;          (*s_etat_processus).erreur_systeme_processus_fils = d_es_processus;
     }      }
   
     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_processus_fils = d_es_processus;          (*s_etat_processus).erreur_systeme_processus_fils = d_es_processus;
     }      }
Line 1220  surveillance_processus(void *argument) Line 1297  surveillance_processus(void *argument)
             }              }
             else              else
             {              {
                 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_processus_fils =                      (*s_etat_processus).erreur_systeme_processus_fils =
                             d_es_processus;                              d_es_processus;
Line 1230  surveillance_processus(void *argument) Line 1308  surveillance_processus(void *argument)
                 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_processus_fils =                      (*s_etat_processus).erreur_systeme_processus_fils =
                             d_es_processus;                              d_es_processus;
Line 1349  surveillance_processus(void *argument) Line 1428  surveillance_processus(void *argument)
   
         retrait_thread_surveillance(s_etat_processus, s_argument_thread);          retrait_thread_surveillance(s_etat_processus, s_argument_thread);
   
         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_processus_fils = d_es_processus;              (*s_etat_processus).erreur_systeme_processus_fils = d_es_processus;
         }          }

Removed from v.1.66  
changed lines
  Added in v.1.76


CVSweb interface <joel.bertrand@systella.fr>