Diff for /rpl/src/instructions_s1.c between versions 1.74 and 1.86

version 1.74, 2015/01/05 13:12:39 version 1.86, 2016/09/27 15:29:38
Line 1 Line 1
 /*  /*
 ================================================================================  ================================================================================
   RPL/2 (R) version 4.1.19    RPL/2 (R) version 4.1.26
   Copyright (C) 1989-2015 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 3690  instruction_syseval(struct_processus *s_ Line 3690  instruction_syseval(struct_processus *s_
   
         verrouillage_threads_concurrents(s_etat_processus);          verrouillage_threads_concurrents(s_etat_processus);
         pid = fork();          pid = fork();
         deverrouillage_threads_concurrents(s_etat_processus);  
   
         if (pid < 0)          if (pid < 0)
         {          {
Line 3735  instruction_syseval(struct_processus *s_ Line 3734  instruction_syseval(struct_processus *s_
         }          }
         else if (pid == 0)          else if (pid == 0)
         {          {
               (*s_etat_processus).erreur_systeme = d_es;
   
             if (close(pipes_entree[1]) != 0)              if (close(pipes_entree[1]) != 0)
             {              {
                 (*s_etat_processus).erreur_systeme = d_es_processus;                  (*s_etat_processus).erreur_systeme = d_es_processus;
Line 3820  instruction_syseval(struct_processus *s_ Line 3821  instruction_syseval(struct_processus *s_
         }          }
         else          else
         {          {
               deverrouillage_threads_concurrents(s_etat_processus);
   
             if (close(pipes_entree[0]) != 0)              if (close(pipes_entree[0]) != 0)
             {              {
                 (*s_etat_processus).erreur_systeme = d_es_processus;                  (*s_etat_processus).erreur_systeme = d_es_processus;
Line 3985  instruction_syseval(struct_processus *s_ Line 3988  instruction_syseval(struct_processus *s_
                     return;                      return;
                 }                  }
   
                 if (waitpid(pid, &status, 0) == -1)                  while(waitpid(pid, &status, 0) == -1)
                 {                  {
 #                   ifndef SEMAPHORES_NOMMES                      if (errno != EINTR)
                         if (sem_post(&((*s_etat_processus).semaphore_fork))  
                                 != 0)  
 #                   else  
                         if (sem_post((*s_etat_processus).semaphore_fork) != 0)  
 #                   endif  
                     {                      {
   #                       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;
                           }
   
                         (*s_etat_processus).erreur_systeme = d_es_processus;                          (*s_etat_processus).erreur_systeme = d_es_processus;
                         return;                          return;
                     }                      }
   
                     (*s_etat_processus).erreur_systeme = d_es_processus;  
                     return;  
                 }                  }
   
 #               ifndef SEMAPHORES_NOMMES  #               ifndef SEMAPHORES_NOMMES

Removed from v.1.74  
changed lines
  Added in v.1.86


CVSweb interface <joel.bertrand@systella.fr>