Diff for /rpl/src/instructions_p7.c between versions 1.25 and 1.44

version 1.25, 2011/06/20 17:54:19 version 1.44, 2012/04/13 14:12:58
Line 1 Line 1
 /*  /*
 ================================================================================  ================================================================================
   RPL/2 (R) version 4.1.0.prerelease.1    RPL/2 (R) version 4.1.8
   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 763  instruction_poke(struct_processus *s_eta Line 763  instruction_poke(struct_processus *s_eta
                     // débloquer les instructions de type WF* pour les                      // débloquer les instructions de type WF* pour les
                     // lectures bloquantes.                      // lectures bloquantes.
   
                     if (kill((*(*((struct_processus_fils *)                      if (envoi_signal_processus((*(*((struct_processus_fils *)
                             (*(*l_element_courant).donnee).objet))                              (*(*l_element_courant).donnee).objet))
                             .thread).pid, SIGINJECT) != 0)                              .thread).pid, rpl_siginject) != 0)
                     {                      {
                         // Le processus fils peut s'être terminé.                          // Le processus fils peut s'être terminé.
                         break;                          break;
Line 789  instruction_poke(struct_processus *s_eta Line 789  instruction_poke(struct_processus *s_eta
                     }                      }
   
 #                   ifndef SEMAPHORES_NOMMES  #                   ifndef SEMAPHORES_NOMMES
                     if (sem_post(&((*s_etat_processus).semaphore_fork)) != 0)                          if (sem_post(&((*s_etat_processus).semaphore_fork))
                     {                                  != 0)
                         (*s_etat_processus).erreur_systeme = d_es_processus;  
                         return;  
                     }  
 #                   else  #                   else
                     if (sem_post((*s_etat_processus).semaphore_fork) != 0)                          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;
                     }                      }
 #                   endif  
   
                     while((longueur_ecriture = write_atomic(s_etat_processus,                      while((longueur_ecriture = write_atomic(s_etat_processus,
                             (*(*((struct_processus_fils *)                              (*(*((struct_processus_fils *)
Line 809  instruction_poke(struct_processus *s_eta Line 806  instruction_poke(struct_processus *s_eta
                             sizeof(unsigned char))) != sizeof(unsigned char))                              sizeof(unsigned char))) != sizeof(unsigned char))
                     {                      {
 #                       ifndef SEMAPHORES_NOMMES  #                       ifndef SEMAPHORES_NOMMES
                         while(sem_wait(&((*s_etat_processus)                              while(sem_wait(
                                 .semaphore_fork)) == -1)                                      &((*s_etat_processus).semaphore_fork)) != 0)
 #                       else  #                       else
                         while(sem_wait((*s_etat_processus)                              while(sem_wait(
                                 .semaphore_fork) == -1)                                      (*s_etat_processus).semaphore_fork) != 0)
 #                       endif  #                       endif
                         {                          {
                             if (errno != EINTR)                              if (errno != EINTR)
Line 862  instruction_poke(struct_processus *s_eta Line 859  instruction_poke(struct_processus *s_eta
                         }                          }
   
 #                       ifndef SEMAPHORES_NOMMES  #                       ifndef SEMAPHORES_NOMMES
                         if (sem_post(&((*s_etat_processus)                              if (sem_post(
                                 .semaphore_fork)) != 0)                                      &((*s_etat_processus).semaphore_fork)) != 0)
 #                       else  #                       else
                         if (sem_post((*s_etat_processus)                              if (sem_post(
                                 .semaphore_fork) != 0)                                      (*s_etat_processus).semaphore_fork) != 0)
 #                       endif  #                       endif
                         {                          {
                             (*s_etat_processus).erreur_systeme = d_es_processus;                              (*s_etat_processus).erreur_systeme = d_es_processus;
Line 889  instruction_poke(struct_processus *s_eta Line 886  instruction_poke(struct_processus *s_eta
                     }                      }
   
 #                   ifndef SEMAPHORES_NOMMES  #                   ifndef SEMAPHORES_NOMMES
                     while(sem_wait(&((*s_etat_processus).semaphore_fork)) == -1)                          while(sem_wait(&((*s_etat_processus).semaphore_fork))
                                   != 0)
 #                   else  #                   else
                     while(sem_wait((*s_etat_processus).semaphore_fork) == -1)                          while(sem_wait((*s_etat_processus).semaphore_fork) != 0)
 #                   endif  #                   endif
                     {                      {
                         if (errno == EINTR)                          if (errno != EINTR)
                         {                          {
                             (*s_etat_processus).erreur_systeme = d_es_processus;                              (*s_etat_processus).erreur_systeme = d_es_processus;
                             return;                              return;
Line 980  instruction_poke(struct_processus *s_eta Line 978  instruction_poke(struct_processus *s_eta
                             (*(*l_element_courant).donnee).objet)).thread)                              (*(*l_element_courant).donnee).objet)).thread)
                             .thread_actif == d_vrai)                              .thread_actif == d_vrai)
                     {                      {
                         if (pthread_kill((*(*((struct_processus_fils *)                          if (envoi_signal_thread((*(*((struct_processus_fils *)
                                 (*(*l_element_courant).donnee).objet)).thread)                                  (*(*l_element_courant).donnee).objet)).thread)
                                 .tid, SIGINJECT) != 0)                                  .tid, rpl_siginject) != 0)
                         {                          {
                             // Le processus fils peut s'être terminé.                              // Le processus fils peut s'être terminé.
   
Line 1039  instruction_poke(struct_processus *s_eta Line 1037  instruction_poke(struct_processus *s_eta
                     }                      }
   
 #                   ifndef SEMAPHORES_NOMMES  #                   ifndef SEMAPHORES_NOMMES
                     if (sem_post(&((*s_etat_processus).semaphore_fork)) != 0)                          if (sem_post(
                                   &((*s_etat_processus).semaphore_fork)) != 0)
 #                   else  #                   else
                     if (sem_post((*s_etat_processus).semaphore_fork) != 0)                          if (sem_post(
                                   (*s_etat_processus).semaphore_fork) != 0)
 #                   endif  #                   endif
                     {                      {
                         (*s_etat_processus).erreur_systeme = d_es_processus;                          (*s_etat_processus).erreur_systeme = d_es_processus;
Line 1055  instruction_poke(struct_processus *s_eta Line 1055  instruction_poke(struct_processus *s_eta
                             sizeof(unsigned char))) != sizeof(unsigned char))                              sizeof(unsigned char))) != sizeof(unsigned char))
                     {                      {
 #                       ifndef SEMAPHORES_NOMMES  #                       ifndef SEMAPHORES_NOMMES
                         while(sem_wait(&((*s_etat_processus)                              while(sem_wait(
                                 .semaphore_fork)) == -1)                                      &((*s_etat_processus).semaphore_fork)) != 0)
 #                       else  #                       else
                         while(sem_wait((*s_etat_processus)                              while(sem_wait(
                                 .semaphore_fork) == -1)                                      (*s_etat_processus).semaphore_fork) != 0)
 #                       endif  #                       endif
                         {                          {
                             if (errno != EINTR)                              if (errno != EINTR)
Line 1108  instruction_poke(struct_processus *s_eta Line 1108  instruction_poke(struct_processus *s_eta
                         }                          }
   
 #                       ifndef SEMAPHORES_NOMMES  #                       ifndef SEMAPHORES_NOMMES
                         if (sem_post(&((*s_etat_processus)                              if (sem_post(
                                 .semaphore_fork)) != 0)                                      &((*s_etat_processus).semaphore_fork)) != 0)
 #                       else  #                       else
                         if (sem_post((*s_etat_processus)                              if (sem_post(
                                 .semaphore_fork) != 0)                                      (*s_etat_processus).semaphore_fork) != 0)
 #                       endif  #                       endif
                         {                          {
                             (*s_etat_processus).erreur_systeme = d_es_processus;                              (*s_etat_processus).erreur_systeme = d_es_processus;
Line 1135  instruction_poke(struct_processus *s_eta Line 1135  instruction_poke(struct_processus *s_eta
                     }                      }
   
 #                   ifndef SEMAPHORES_NOMMES  #                   ifndef SEMAPHORES_NOMMES
                     while(sem_wait(&((*s_etat_processus)                          while(sem_wait(
                             .semaphore_fork)) == -1)                                  &((*s_etat_processus).semaphore_fork)) != 0)
 #                   else  #                   else
                     while(sem_wait((*s_etat_processus)                          while(sem_wait(
                             .semaphore_fork) == -1)                                  (*s_etat_processus).semaphore_fork) != 0)
 #                   endif  #                   endif
                     {                      {
                         if (errno != EINTR)                          if (errno != EINTR)

Removed from v.1.25  
changed lines
  Added in v.1.44


CVSweb interface <joel.bertrand@systella.fr>