Diff for /rpl/src/instructions_s1.c between versions 1.68 and 1.90

version 1.68, 2013/06/21 14:15:55 version 1.90, 2018/05/30 09:27:37
Line 1 Line 1
 /*  /*
 ================================================================================  ================================================================================
   RPL/2 (R) version 4.1.15    RPL/2 (R) version 4.1.29
   Copyright (C) 1989-2013 Dr. BERTRAND Joël    Copyright (C) 1989-2018 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.68  
changed lines
  Added in v.1.90


CVSweb interface <joel.bertrand@systella.fr>