Diff for /rpl/src/instructions_p7.c between versions 1.36 and 1.77

version 1.36, 2011/09/20 08:56:23 version 1.77, 2019/01/01 09:03:08
Line 1 Line 1
 /*  /*
 ================================================================================  ================================================================================
   RPL/2 (R) version 4.1.3    RPL/2 (R) version 4.1.30
   Copyright (C) 1989-2011 Dr. BERTRAND Joël    Copyright (C) 1989-2019 Dr. BERTRAND Joël
   
   This file is part of RPL/2.    This file is part of RPL/2.
   
Line 718  instruction_poke(struct_processus *s_eta Line 718  instruction_poke(struct_processus *s_eta
             return;              return;
         }          }
   
         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 753  instruction_poke(struct_processus *s_eta Line 754  instruction_poke(struct_processus *s_eta
   
                     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));
   
                         (*s_etat_processus).erreur_systeme = d_es_signal;                          (*s_etat_processus).erreur_systeme = d_es_signal;
                         return;                          return;
Line 765  instruction_poke(struct_processus *s_eta Line 767  instruction_poke(struct_processus *s_eta
   
                     if (envoi_signal_processus((*(*((struct_processus_fils *)                      if (envoi_signal_processus((*(*((struct_processus_fils *)
                             (*(*l_element_courant).donnee).objet))                              (*(*l_element_courant).donnee).objet))
                             .thread).pid, rpl_siginject) != 0)                              .thread).pid, rpl_siginject, d_faux) != 0)
                     {                      {
                         // Le processus fils peut s'être terminé.                          // Le processus fils peut s'être terminé.
                         break;                          break;
Line 783  instruction_poke(struct_processus *s_eta Line 785  instruction_poke(struct_processus *s_eta
   
                         if ((*s_etat_processus).erreur_systeme != d_es)                          if ((*s_etat_processus).erreur_systeme != d_es)
                         {                          {
                             pthread_mutex_unlock(&((*s_etat_processus).mutex));                              pthread_mutex_unlock(&((*s_etat_processus)
                                       .mutex_pile_processus));
                             return;                              return;
                         }                          }
                     }                      }
   
                     if (sem_post(&((*s_etat_processus).semaphore_fork)) != 0)  #                   ifndef SEMAPHORES_NOMMES
                           if (sem_post(&((*s_etat_processus).semaphore_fork))
                                   != 0)
   #                   else
                           if (sem_post((*s_etat_processus).semaphore_fork) != 0)
   #                   endif
                     {                      {
                         (*s_etat_processus).erreur_systeme = d_es_processus;                          (*s_etat_processus).erreur_systeme = d_es_processus;
                         return;                          return;
Line 800  instruction_poke(struct_processus *s_eta Line 808  instruction_poke(struct_processus *s_eta
                             .pipe_nombre_injections[1], "-",                              .pipe_nombre_injections[1], "-",
                             sizeof(unsigned char))) != sizeof(unsigned char))                              sizeof(unsigned char))) != sizeof(unsigned char))
                     {                      {
                         if (sem_wait(  #                       ifndef SEMAPHORES_NOMMES
                                 &((*s_etat_processus).semaphore_fork)) != 0)                              while(sem_wait(
                                       &((*s_etat_processus).semaphore_fork)) != 0)
   #                       else
                               while(sem_wait(
                                       (*s_etat_processus).semaphore_fork) != 0)
   #                       endif
                         {                          {
                             (*s_etat_processus).erreur_systeme = d_es_processus;                              if (errno != EINTR)
                             return;                              {
                                   (*s_etat_processus).erreur_systeme =
                                           d_es_processus;
                                   return;
                               }
                         }                          }
   
                         if (longueur_ecriture == -1)                          if (longueur_ecriture == -1)
                         {                          {
                             pthread_mutex_unlock(&((*s_etat_processus).mutex));                              pthread_mutex_unlock(&((*s_etat_processus)
                                       .mutex_pile_processus));
   
                             liberation(s_etat_processus, s_objet_argument_1);                              liberation(s_etat_processus, s_objet_argument_1);
                             liberation(s_etat_processus, s_objet_argument_2);                              liberation(s_etat_processus, s_objet_argument_2);
Line 844  instruction_poke(struct_processus *s_eta Line 862  instruction_poke(struct_processus *s_eta
                             return;                              return;
                         }                          }
   
                         if (sem_post(  #                       ifndef SEMAPHORES_NOMMES
                                 &((*s_etat_processus).semaphore_fork)) != 0)                              if (sem_post(
                                       &((*s_etat_processus).semaphore_fork)) != 0)
   #                       else
                               if (sem_post(
                                       (*s_etat_processus).semaphore_fork) != 0)
   #                       endif
                         {                          {
                             (*s_etat_processus).erreur_systeme = d_es_processus;                              (*s_etat_processus).erreur_systeme = d_es_processus;
                             return;                              return;
Line 866  instruction_poke(struct_processus *s_eta Line 889  instruction_poke(struct_processus *s_eta
                         }                          }
                     }                      }
   
                     if (sem_wait(&((*s_etat_processus).semaphore_fork)) != 0)  #                   ifndef SEMAPHORES_NOMMES
                           while(sem_wait(&((*s_etat_processus).semaphore_fork))
                                   != 0)
   #                   else
                           while(sem_wait((*s_etat_processus).semaphore_fork) != 0)
   #                   endif
                     {                      {
                         (*s_etat_processus).erreur_systeme = d_es_processus;                          if (errno != EINTR)
                         return;                          {
                               (*s_etat_processus).erreur_systeme = d_es_processus;
                               return;
                           }
                     }                      }
   
                     if (registre_stop == 0)                      if (registre_stop == 0)
Line 892  instruction_poke(struct_processus *s_eta Line 923  instruction_poke(struct_processus *s_eta
   
                     if (sigaction(SIGPIPE, &registre, NULL) != 0)                      if (sigaction(SIGPIPE, &registre, NULL) != 0)
                     {                      {
                         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;
                         return;                          return;
Line 929  instruction_poke(struct_processus *s_eta Line 961  instruction_poke(struct_processus *s_eta
   
                     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));
   
                         (*s_etat_processus).erreur_systeme = d_es_signal;                          (*s_etat_processus).erreur_systeme = d_es_signal;
                         return;                          return;
Line 1004  instruction_poke(struct_processus *s_eta Line 1037  instruction_poke(struct_processus *s_eta
   
                         if ((*s_etat_processus).erreur_systeme != d_es)                          if ((*s_etat_processus).erreur_systeme != d_es)
                         {                          {
                             pthread_mutex_unlock(&((*s_etat_processus).mutex));                              pthread_mutex_unlock(&((*s_etat_processus)
                                       .mutex_pile_processus));
                             return;                              return;
                         }                          }
                     }                      }
   
                     if (sem_post(  #                   ifndef SEMAPHORES_NOMMES
                             &((*s_etat_processus).semaphore_fork)) != 0)                          if (sem_post(
                                   &((*s_etat_processus).semaphore_fork)) != 0)
   #                   else
                           if (sem_post(
                                   (*s_etat_processus).semaphore_fork) != 0)
   #                   endif
                     {                      {
                         (*s_etat_processus).erreur_systeme = d_es_processus;                          (*s_etat_processus).erreur_systeme = d_es_processus;
                         return;                          return;
Line 1022  instruction_poke(struct_processus *s_eta Line 1061  instruction_poke(struct_processus *s_eta
                             .pipe_nombre_injections[1], "-",                              .pipe_nombre_injections[1], "-",
                             sizeof(unsigned char))) != sizeof(unsigned char))                              sizeof(unsigned char))) != sizeof(unsigned char))
                     {                      {
                         if (sem_wait(  #                       ifndef SEMAPHORES_NOMMES
                                 &((*s_etat_processus).semaphore_fork)) != 0)                              while(sem_wait(
                                       &((*s_etat_processus).semaphore_fork)) != 0)
   #                       else
                               while(sem_wait(
                                       (*s_etat_processus).semaphore_fork) != 0)
   #                       endif
                         {                          {
                             (*s_etat_processus).erreur_systeme = d_es_processus;                              if (errno != EINTR)
                             return;                              {
                                   (*s_etat_processus).erreur_systeme =
                                           d_es_processus;
                                   return;
                               }
                         }                          }
   
                         if (longueur_ecriture == -1)                          if (longueur_ecriture == -1)
                         {                          {
                             pthread_mutex_unlock(&((*s_etat_processus).mutex));                              pthread_mutex_unlock(&((*s_etat_processus)
                                       .mutex_pile_processus));
   
                             liberation(s_etat_processus, s_objet_argument_1);                              liberation(s_etat_processus, s_objet_argument_1);
                             liberation(s_etat_processus, s_objet_argument_2);                              liberation(s_etat_processus, s_objet_argument_2);
Line 1066  instruction_poke(struct_processus *s_eta Line 1115  instruction_poke(struct_processus *s_eta
                             return;                              return;
                         }                          }
   
                         if (sem_post(  #                       ifndef SEMAPHORES_NOMMES
                                 &((*s_etat_processus).semaphore_fork)) != 0)                              if (sem_post(
                                       &((*s_etat_processus).semaphore_fork)) != 0)
   #                       else
                               if (sem_post(
                                       (*s_etat_processus).semaphore_fork) != 0)
   #                       endif
                         {                          {
                             (*s_etat_processus).erreur_systeme = d_es_processus;                              (*s_etat_processus).erreur_systeme = d_es_processus;
                             return;                              return;
Line 1088  instruction_poke(struct_processus *s_eta Line 1142  instruction_poke(struct_processus *s_eta
                         }                          }
                     }                      }
   
                     if (sem_wait(  #                   ifndef SEMAPHORES_NOMMES
                             &((*s_etat_processus).semaphore_fork)) != 0)                          while(sem_wait(
                                   &((*s_etat_processus).semaphore_fork)) != 0)
   #                   else
                           while(sem_wait(
                                   (*s_etat_processus).semaphore_fork) != 0)
   #                   endif
                     {                      {
                         (*s_etat_processus).erreur_systeme = d_es_processus;                          if (errno != EINTR)
                         return;                          {
                               (*s_etat_processus).erreur_systeme = d_es_processus;
                               return;
                           }
                     }                      }
   
                     if (registre_stop == 0)                      if (registre_stop == 0)
Line 1115  instruction_poke(struct_processus *s_eta Line 1177  instruction_poke(struct_processus *s_eta
   
                     if (sigaction(SIGPIPE, &registre, NULL) != 0)                      if (sigaction(SIGPIPE, &registre, NULL) != 0)
                     {                      {
                         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;
                         return;                          return;
Line 1128  instruction_poke(struct_processus *s_eta Line 1191  instruction_poke(struct_processus *s_eta
             l_element_courant = (*l_element_courant).suivant;              l_element_courant = (*l_element_courant).suivant;
         }          }
   
         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 1230  instruction_private(struct_processus *s_ Line 1294  instruction_private(struct_processus *s_
             return;              return;
         }          }
   
         if (pthread_mutex_lock(&((*(*s_etat_processus)  
                 .s_liste_variables_partagees).mutex)) != 0)  
         {  
             (*s_etat_processus).erreur_systeme = d_es_processus;  
             return;  
         }  
   
         if (recherche_variable_partagee(s_etat_processus, ((*((struct_nom *)          if (recherche_variable_partagee(s_etat_processus, ((*((struct_nom *)
                 (*s_objet).objet)).nom), (*(*s_etat_processus)                  (*s_objet).objet)).nom), (*(*s_etat_processus)
                 .pointeur_variable_courante).variable_partagee,                  .pointeur_variable_courante).variable_partagee,
                 (*(*s_etat_processus).pointeur_variable_courante).origine)                  (*(*s_etat_processus).pointeur_variable_courante).origine)
                 == d_faux)                  == NULL)
         {          {
             if (pthread_mutex_unlock(&((*(*s_etat_processus)  
                     .s_liste_variables_partagees).mutex)) != 0)  
             {  
                 (*s_etat_processus).erreur_systeme = d_es_processus;  
                 return;  
             }  
   
             liberation(s_etat_processus, s_objet);              liberation(s_etat_processus, s_objet);
   
             (*s_etat_processus).erreur_systeme = d_es;              (*s_etat_processus).erreur_systeme = d_es;
Line 1257  instruction_private(struct_processus *s_ Line 1307  instruction_private(struct_processus *s_
         }          }
   
         (*(*s_etat_processus).pointeur_variable_courante).objet =          (*(*s_etat_processus).pointeur_variable_courante).objet =
                 (*(*s_etat_processus).s_liste_variables_partagees).table                  (*(*s_etat_processus).pointeur_variable_partagee_courante)
                 [(*(*s_etat_processus).s_liste_variables_partagees)                  .objet;
                 .position_variable].objet;          (*(*s_etat_processus).pointeur_variable_partagee_courante).objet = NULL;
         (*(*s_etat_processus).s_liste_variables_partagees).table  
                 [(*(*s_etat_processus).s_liste_variables_partagees)  
                 .position_variable].objet = NULL;  
   
         if (retrait_variable_partagee(s_etat_processus,          if (retrait_variable_partagee(s_etat_processus,
                 (*((struct_nom *) (*s_objet).objet)).nom,                  (*((struct_nom *) (*s_objet).objet)).nom,
                 (*(*s_etat_processus).pointeur_variable_courante)                  (*(*s_etat_processus).pointeur_variable_courante)
                 .variable_partagee) == d_erreur)                  .variable_partagee) == d_erreur)
         {          {
             if (pthread_mutex_unlock(&((*(*s_etat_processus)  
                     .s_liste_variables_partagees).mutex)) != 0)  
             {  
                 (*s_etat_processus).erreur_systeme = d_es_processus;  
                 return;  
             }  
   
             liberation(s_etat_processus, s_objet);              liberation(s_etat_processus, s_objet);
             return;              return;
         }          }
Line 1290  instruction_private(struct_processus *s_ Line 1330  instruction_private(struct_processus *s_
             (*(*s_etat_processus).pointeur_variable_courante)              (*(*s_etat_processus).pointeur_variable_courante)
                     .variable_partagee.pointeur = NULL;                      .variable_partagee.pointeur = NULL;
         }          }
   
         if (pthread_mutex_unlock(&((*(*s_etat_processus)  
                 .s_liste_variables_partagees).mutex)) != 0)  
         {  
             (*s_etat_processus).erreur_systeme = d_es_processus;  
             return;  
         }  
     }      }
     else if ((*s_objet).type == LST)      else if ((*s_objet).type == LST)
     {      {
Line 1323  instruction_private(struct_processus *s_ Line 1356  instruction_private(struct_processus *s_
                 return;                  return;
             }              }
   
             if (pthread_mutex_lock(&((*(*s_etat_processus)  
                     .s_liste_variables_partagees).mutex)) != 0)  
             {  
                 (*s_etat_processus).erreur_systeme = d_es_processus;  
                 return;  
             }  
   
             if (recherche_variable_partagee(s_etat_processus, ((*((struct_nom *)              if (recherche_variable_partagee(s_etat_processus, ((*((struct_nom *)
                     (*s_objet).objet)).nom), (*(*s_etat_processus)                      (*s_objet).objet)).nom), (*(*s_etat_processus)
                     .pointeur_variable_courante).variable_partagee,                      .pointeur_variable_courante).variable_partagee,
                     (*(*s_etat_processus).pointeur_variable_courante).origine)                      (*(*s_etat_processus).pointeur_variable_courante).origine)
                     == d_faux)                      == NULL)
             {              {
                 if (pthread_mutex_unlock(&((*(*s_etat_processus)  
                         .s_liste_variables_partagees).mutex)) != 0)  
                 {  
                     (*s_etat_processus).erreur_systeme = d_es_processus;  
                     return;  
                 }  
   
                 liberation(s_etat_processus, s_objet);                  liberation(s_etat_processus, s_objet);
   
                 (*s_etat_processus).erreur_systeme = d_es;                  (*s_etat_processus).erreur_systeme = d_es;
Line 1352  instruction_private(struct_processus *s_ Line 1371  instruction_private(struct_processus *s_
             }              }
   
             (*(*s_etat_processus).pointeur_variable_courante).objet =              (*(*s_etat_processus).pointeur_variable_courante).objet =
                     (*(*s_etat_processus).s_liste_variables_partagees).table                      (*(*s_etat_processus).pointeur_variable_partagee_courante)
                     [(*(*s_etat_processus).s_liste_variables_partagees)                      .objet;
                     .position_variable].objet;              (*(*s_etat_processus).pointeur_variable_partagee_courante).objet
             (*(*s_etat_processus).s_liste_variables_partagees).table                      = NULL;
                     [(*(*s_etat_processus).s_liste_variables_partagees)  
                     .position_variable].objet = NULL;  
   
             if ((*(*s_etat_processus).pointeur_variable_courante).origine              if ((*(*s_etat_processus).pointeur_variable_courante).origine
                     == 'P')                      == 'P')
Line 1376  instruction_private(struct_processus *s_ Line 1393  instruction_private(struct_processus *s_
                     (*(*s_etat_processus).pointeur_variable_courante)                      (*(*s_etat_processus).pointeur_variable_courante)
                     .variable_statique) == d_erreur)                      .variable_statique) == d_erreur)
             {              {
                 if (pthread_mutex_unlock(&((*(*s_etat_processus)  
                         .s_liste_variables_partagees).mutex)) != 0)  
                 {  
                     (*s_etat_processus).erreur_systeme = d_es_processus;  
                     return;  
                 }  
   
                 liberation(s_etat_processus, s_objet);                  liberation(s_etat_processus, s_objet);
                 return;                  return;
             }              }
   
             if (pthread_mutex_unlock(&((*(*s_etat_processus)  
                     .s_liste_variables_partagees).mutex)) != 0)  
             {  
                 (*s_etat_processus).erreur_systeme = d_es_processus;  
                 return;  
             }  
   
             l_element_courant = (*l_element_courant).suivant;              l_element_courant = (*l_element_courant).suivant;
         }          }
     }      }

Removed from v.1.36  
changed lines
  Added in v.1.77


CVSweb interface <joel.bertrand@systella.fr>