Diff for /rpl/src/instructions_r6.c between versions 1.50 and 1.79

version 1.50, 2013/03/21 16:31:59 version 1.79, 2020/01/10 11:15:48
Line 1 Line 1
 /*  /*
 ================================================================================  ================================================================================
   RPL/2 (R) version 4.1.13    RPL/2 (R) version 4.1.32
   Copyright (C) 1989-2013 Dr. BERTRAND Joël    Copyright (C) 1989-2020 Dr. BERTRAND Joël
   
   This file is part of RPL/2.    This file is part of RPL/2.
   
Line 109  instruction_recv(struct_processus *s_eta Line 109  instruction_recv(struct_processus *s_eta
          * de la structure présente dans la pile opérationnelle.           * de la structure présente dans la pile opérationnelle.
          */           */
   
         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 207  instruction_recv(struct_processus *s_eta Line 208  instruction_recv(struct_processus *s_eta
   
         if (nombre_donnees == -1)          if (nombre_donnees == -1)
         {          {
             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 223  instruction_recv(struct_processus *s_eta Line 225  instruction_recv(struct_processus *s_eta
              * On empile une valeur nulle               * On empile une valeur nulle
              */               */
   
             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 309  instruction_recv(struct_processus *s_eta Line 312  instruction_recv(struct_processus *s_eta
                 profilage(s_etat_processus, NULL);                  profilage(s_etat_processus, NULL);
             }              }
   
             pthread_mutex_unlock(&((*s_etat_processus).mutex));              pthread_mutex_unlock(&((*s_etat_processus).mutex_pile_processus));
             return;              return;
         }          }
   
 #       ifndef SEMAPHORES_NOMMES  
             while(sem_wait(&((*s_etat_processus).semaphore_fork)) != 0)  
 #       else  
             while(sem_wait((*s_etat_processus).semaphore_fork) != 0)  
 #       endif  
         {  
             if (errno != EINTR)  
             {  
                 (*s_etat_processus).erreur_systeme = d_es_processus;  
                 return;  
             }  
         }  
   
         if (pthread_mutex_lock(&((*(*((struct_processus_fils *)          if (pthread_mutex_lock(&((*(*((struct_processus_fils *)
                 (*(*l_element_courant).donnee).objet)).thread).mutex)) != 0)                  (*(*l_element_courant).donnee).objet)).thread).mutex)) != 0)
         {          {
Line 343  instruction_recv(struct_processus *s_eta Line 333  instruction_recv(struct_processus *s_eta
             return;              return;
         }          }
   
           if (pthread_mutex_lock(&mutex_sigaction) != 0)
           {
               (*s_etat_processus).erreur_systeme = d_es_processus;
               return;
           }
   
         action.sa_handler = SIG_IGN;          action.sa_handler = SIG_IGN;
         action.sa_flags = SA_ONSTACK;          action.sa_flags = 0;
   
         if (sigaction(SIGPIPE, &action, &registre) != 0)          if (sigaction(SIGPIPE, &action, &registre) != 0)
         {          {
Line 360  instruction_recv(struct_processus *s_eta Line 356  instruction_recv(struct_processus *s_eta
                         = registre_stop;                          = registre_stop;
             }              }
   
             pthread_mutex_unlock(&((*s_etat_processus).mutex));              pthread_mutex_unlock(&((*s_etat_processus).mutex_pile_processus));
   
             if ((*s_etat_processus).profilage == d_vrai)              if ((*s_etat_processus).profilage == d_vrai)
             {              {
                 profilage(s_etat_processus, NULL);                  profilage(s_etat_processus, NULL);
             }              }
   
               pthread_mutex_unlock(&mutex_sigaction);
             (*s_etat_processus).erreur_systeme = d_es_signal;              (*s_etat_processus).erreur_systeme = d_es_signal;
             return;              return;
         }          }
   
 #       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;  
             return;  
         }  
   
         while((longueur_ecriture = write_atomic(s_etat_processus,          while((longueur_ecriture = write_atomic(s_etat_processus,
                 (*(*((struct_processus_fils *) (*(*l_element_courant)                  (*(*((struct_processus_fils *) (*(*l_element_courant)
                 .donnee).objet)).thread).pipe_nombre_injections[1], "+",                  .donnee).objet)).thread).pipe_nombre_injections[1], "+",
Line 401  instruction_recv(struct_processus *s_eta Line 388  instruction_recv(struct_processus *s_eta
         {          {
             if (errno != EINTR)              if (errno != EINTR)
             {              {
                   pthread_mutex_unlock(&mutex_sigaction);
                 (*s_etat_processus).erreur_systeme = d_es_processus;                  (*s_etat_processus).erreur_systeme = d_es_processus;
                 return;                  return;
             }              }
Line 424  instruction_recv(struct_processus *s_eta Line 412  instruction_recv(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;
         }          }
   
         if (pthread_mutex_unlock(&((*s_etat_processus).mutex)) != 0)          if (pthread_mutex_unlock(&mutex_sigaction) != 0)
           {
               (*s_etat_processus).erreur_systeme = d_es_processus;
               return;
           }
   
           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 1348  instruction_rdgn(struct_processus *s_eta Line 1343  instruction_rdgn(struct_processus *s_eta
   
     if ((*s_objet_argument).type == CHN)      if ((*s_objet_argument).type == CHN)
     {      {
         if ((requete = conversion_majuscule((unsigned char *)          if ((requete = conversion_majuscule(s_etat_processus, (unsigned char *)
                 (*s_objet_argument).objet)) == NULL)                  (*s_objet_argument).objet)) == NULL)
         {          {
             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;              (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
Line 1384  instruction_rdgn(struct_processus *s_eta Line 1379  instruction_rdgn(struct_processus *s_eta
             else              else
             {              {
                 if (((*s_objet_resultat).objet = conversion_majuscule(                  if (((*s_objet_resultat).objet = conversion_majuscule(
                         (unsigned char *) gsl_rng_name(                          s_etat_processus, (unsigned char *) gsl_rng_name(
                         (*s_etat_processus).generateur_aleatoire))) == NULL)                          (*s_etat_processus).generateur_aleatoire))) == NULL)
                 {                  {
                     (*s_etat_processus).erreur_systeme =                      (*s_etat_processus).erreur_systeme =
Line 1638  instruction_recode(struct_processus *s_e Line 1633  instruction_recode(struct_processus *s_e
             ((*s_objet_argument_2).type == CHN) &&              ((*s_objet_argument_2).type == CHN) &&
             ((*s_objet_argument_3).type == CHN))              ((*s_objet_argument_3).type == CHN))
     {      {
         if ((encodage_source = conversion_majuscule((unsigned char *)          if ((encodage_source = conversion_majuscule(s_etat_processus,
                 (*s_objet_argument_2).objet)) == NULL)                  (unsigned char *) (*s_objet_argument_2).objet)) == NULL)
         {          {
             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;              (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
             return;              return;
         }          }
   
         if ((encodage_destination = conversion_majuscule((unsigned char *)          if ((encodage_destination = conversion_majuscule(s_etat_processus,
                 (*s_objet_argument_1).objet)) == NULL)                  (unsigned char *) (*s_objet_argument_1).objet)) == NULL)
         {          {
             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;              (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
             return;              return;

Removed from v.1.50  
changed lines
  Added in v.1.79


CVSweb interface <joel.bertrand@systella.fr>