Diff for /rpl/src/instructions_w1.c between versions 1.54 and 1.58

version 1.54, 2011/12/02 10:43:22 version 1.58, 2012/01/17 14:44:12
Line 1 Line 1
 /*  /*
 ================================================================================  ================================================================================
   RPL/2 (R) version 4.1.5    RPL/2 (R) version 4.1.6
   Copyright (C) 1989-2011 Dr. BERTRAND Joël    Copyright (C) 1989-2012 Dr. BERTRAND Joël
   
   This file is part of RPL/2.    This file is part of RPL/2.
   
Line 1328  instruction_write(struct_processus *s_et Line 1328  instruction_write(struct_processus *s_et
             {              {
                 BUG(((*descripteur).type != 'C'), uprintf("Bad filetype !\n"));                  BUG(((*descripteur).type != 'C'), uprintf("Bad filetype !\n"));
   
                   if ((*s_objet_argument_2).type != LST)
                   {
                       liberation(s_etat_processus, s_objet_argument_2);
                       liberation(s_etat_processus, s_objet_argument_1);
   
                       (*s_etat_processus).erreur_execution =
                               d_ex_erreur_type_argument;
                       return;
                   }
   
                   if ((*((struct_liste_chainee *) (*s_objet_argument_2).objet))
                           .donnee == NULL)
                   {
                       liberation(s_etat_processus, s_objet_argument_2);
                       liberation(s_etat_processus, s_objet_argument_1);
   
                       (*s_etat_processus).erreur_execution =
                               d_ex_erreur_type_argument;
                       return;
                   }
   
                 if ((*((*((struct_liste_chainee *) (*s_objet_argument_2).objet))                  if ((*((*((struct_liste_chainee *) (*s_objet_argument_2).objet))
                         .donnee)).type != CHN)                          .donnee)).type != CHN)
                 {                  {
Line 2753  instruction_wfsock(struct_processus *s_e Line 2774  instruction_wfsock(struct_processus *s_e
             s_poll.events = POLLIN;              s_poll.events = POLLIN;
             s_poll.revents = 0;              s_poll.revents = 0;
   
             while(poll(&s_poll, 1, -1) < 0)              do
             {              {
                 if (errno != EINTR)                  drapeau = d_vrai;
   
   #               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 =                      (*s_etat_processus).erreur_systeme = d_es_processus;
                             d_es_erreur_fichier;                      return;
                     return;    
                 }                  }
             }  
                   if (poll(&s_poll, 1, -1) < 0)
                   {
                       erreur = errno;
   
   #                   ifndef SEMAPHORES_NOMMES
                       while(sem_wait(&((*s_etat_processus)
                               .semaphore_fork)) != 0)
   #                   else
                       while(sem_wait((*s_etat_processus).semaphore_fork)
                               != 0)
   #                   endif
   
                       if (erreur != EINTR)
                       {
                           liberation(s_etat_processus, s_objet_argument);
                           liberation(s_etat_processus, s_objet_resultat);
   
                           (*s_etat_processus).erreur_execution =
                                   d_ex_erreur_acces_fichier;
                           return;
                       }
   
                       scrutation_injection(s_etat_processus);
   
                       if ((*s_etat_processus).var_volatile_requete_arret != 0)
                       {
                           drapeau = d_vrai;
                       }
                       else
                       {
                           drapeau = d_faux;
                       }
                   }
                   else
                   {
   #                   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;
                           }
                       }
                   }
               } while(drapeau == d_faux);
   
             if (empilement(s_etat_processus, &((*s_etat_processus).l_base_pile),              if (empilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
                     s_objet_argument) == d_erreur)                      s_objet_argument) == d_erreur)
Line 2818  instruction_wfsock(struct_processus *s_e Line 2896  instruction_wfsock(struct_processus *s_e
                     {                      {
                         erreur = errno;                          erreur = errno;
   
 #                   ifndef SEMAPHORES_NOMMES  #                       ifndef SEMAPHORES_NOMMES
                             while(sem_wait(&((*s_etat_processus)                          while(sem_wait(&((*s_etat_processus)
                                     .semaphore_fork)) != 0)                                  .semaphore_fork)) != 0)
 #                   else  #                       else
                             while(sem_wait((*s_etat_processus).semaphore_fork)                          while(sem_wait((*s_etat_processus).semaphore_fork)
                                     != 0)                                  != 0)
 #                   endif  #                       endif
                         {                          {
                             if (errno != EINTR)                              if (errno != EINTR)
                             {                              {

Removed from v.1.54  
changed lines
  Added in v.1.58


CVSweb interface <joel.bertrand@systella.fr>