Diff for /rpl/src/gestion_processus.c between versions 1.67 and 1.85

version 1.67, 2013/05/28 22:09:55 version 1.85, 2016/07/21 15:22:52
Line 1 Line 1
 /*  /*
 ================================================================================  ================================================================================
   RPL/2 (R) version 4.1.14    RPL/2 (R) version 4.1.25
   Copyright (C) 1989-2013 Dr. BERTRAND Joël    Copyright (C) 1989-2016 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"));
     }      }
   
       nombre_thread_surveillance_processus++;
     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 177  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 379  surveillance_processus(void *argument) Line 381  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 430  surveillance_processus(void *argument) Line 432  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 621  surveillance_processus(void *argument) Line 624  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 631  surveillance_processus(void *argument) Line 634  surveillance_processus(void *argument)
                         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))                          if (pthread_mutex_lock(&((*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 657  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 698  surveillance_processus(void *argument) Line 701  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 989  surveillance_processus(void *argument) Line 992  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 1083  surveillance_processus(void *argument) Line 1087  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 1294  surveillance_processus(void *argument) Line 1298  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 1304  surveillance_processus(void *argument) Line 1309  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 1422  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);
           nombre_thread_surveillance_processus--;
   
         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;
         }          }
     }      }
   
     pthread_exit(NULL);      pthread_exit(NULL);
     return(NULL);  
 }  }
   
   
Line 2991  lecture_pipe(struct_processus *s_etat_pr Line 2998  lecture_pipe(struct_processus *s_etat_pr
 void  void
 scrutation_injection(struct_processus *s_etat_processus)  scrutation_injection(struct_processus *s_etat_processus)
 {  {
     fd_set                          ensemble_descripteurs;  
   
     logical1                        drapeau_erreur;      logical1                        drapeau_erreur;
     logical1                        registre_arret_si_exception;      logical1                        registre_arret_si_exception;
   
 #   ifdef PSELECT      struct pollfd                   fds;
         struct timespec             timeout;  
 #   else  
         struct timeval              timeout;  
 #   endif  
   
     unsigned char                   tampon;      unsigned char                   tampon;
     unsigned char                   tampon_profilage[20];      unsigned char                   tampon_profilage[20];
Line 3011  scrutation_injection(struct_processus *s Line 3012  scrutation_injection(struct_processus *s
   
     if ((*s_etat_processus).var_volatile_processus_racine == 0)      if ((*s_etat_processus).var_volatile_processus_racine == 0)
     {      {
         FD_ZERO(&ensemble_descripteurs);          fds.fd = (*s_etat_processus).pipe_nombre_injections;
         FD_SET((*s_etat_processus).pipe_nombre_injections,          fds.events = POLLIN;
                 &ensemble_descripteurs);          fds.revents = 0;
   
 #       ifdef PSELECT          if (poll(&fds, 1, 0) > 0)
         timeout.tv_sec = 0;  
         timeout.tv_nsec = 0;  
   
         if (pselect((*s_etat_processus).pipe_nombre_injections + 1,  
                 &ensemble_descripteurs, NULL, NULL, &timeout, NULL) > 0)  
 #       else  
         timeout.tv_sec = 0;  
         timeout.tv_usec = 0;  
   
         if (select((*s_etat_processus).pipe_nombre_injections + 1,  
                 &ensemble_descripteurs, NULL, NULL, &timeout) > 0)  
 #       endif  
         {          {
             if (read_atomic(s_etat_processus,              if (read_atomic(s_etat_processus,
                     (*s_etat_processus).pipe_nombre_injections,                      (*s_etat_processus).pipe_nombre_injections,

Removed from v.1.67  
changed lines
  Added in v.1.85


CVSweb interface <joel.bertrand@systella.fr>