Diff for /rpl/src/instructions_s1.c between versions 1.37 and 1.39

version 1.37, 2011/09/14 17:55:59 version 1.39, 2011/09/20 08:56:23
Line 3403  instruction_syseval(struct_processus *s_ Line 3403  instruction_syseval(struct_processus *s_
   
     pid_t                       pid;      pid_t                       pid;
   
     sigset_t                    oldset;  
     sigset_t                    set;  
   
     ssize_t                     longueur_ecriture;      ssize_t                     longueur_ecriture;
   
     struct_liste_chainee        *l_element_courant;      struct_liste_chainee        *l_element_courant;
Line 3702  instruction_syseval(struct_processus *s_ Line 3699  instruction_syseval(struct_processus *s_
   
         fflush(NULL);          fflush(NULL);
   
         sigfillset(&set);  
         pthread_sigmask(SIG_BLOCK, &set, &oldset);  
   
         verrouillage_threads_concurrents(s_etat_processus);          verrouillage_threads_concurrents(s_etat_processus);
         pid = fork();          pid = fork();
         deverrouillage_threads_concurrents(s_etat_processus);          deverrouillage_threads_concurrents(s_etat_processus);
   
         pthread_sigmask(SIG_SETMASK, &oldset, NULL);  
         sigpending(&set);  
   
         if (pid < 0)          if (pid < 0)
         {          {
             if (close(pipes_entree[0]) != 0)              if (close(pipes_entree[0]) != 0)
Line 3867  instruction_syseval(struct_processus *s_ Line 3858  instruction_syseval(struct_processus *s_
                     longueur_ecriture = strlen((unsigned char *)                      longueur_ecriture = strlen((unsigned char *)
                             (*(*l_element_courant).donnee).objet);                              (*(*l_element_courant).donnee).objet);
   
                     if (pthread_mutex_unlock(&((*s_etat_processus).mutex_fork))                      if (sem_post(&((*s_etat_processus).semaphore_fork)) != 0)
                             != 0)  
                     {                      {
                         (*s_etat_processus).erreur_systeme = d_es_processus;                          (*s_etat_processus).erreur_systeme = d_es_processus;
                         return;                          return;
Line 3879  instruction_syseval(struct_processus *s_ Line 3869  instruction_syseval(struct_processus *s_
                             (*(*l_element_courant).donnee).objet,                              (*(*l_element_courant).donnee).objet,
                             longueur_ecriture) != longueur_ecriture)                              longueur_ecriture) != longueur_ecriture)
                     {                      {
                         while(pthread_mutex_lock(&((*s_etat_processus)                          while(sem_wait(&((*s_etat_processus)
                                 .mutex_fork)) != 0)                                  .semaphore_fork)) != 0)
                         {                          {
                             (*s_etat_processus).erreur_systeme =                              (*s_etat_processus).erreur_systeme =
                                     d_es_processus;                                      d_es_processus;
Line 3893  instruction_syseval(struct_processus *s_ Line 3883  instruction_syseval(struct_processus *s_
                             return;                              return;
                         }                          }
   
                         if (pthread_mutex_unlock(&((*s_etat_processus)                          if (sem_post(&((*s_etat_processus)
                                 .mutex_fork)) != 0)                                  .semaphore_fork)) != 0)
                         {                          {
                             (*s_etat_processus).erreur_systeme = d_es_processus;                              (*s_etat_processus).erreur_systeme = d_es_processus;
                             return;                              return;
Line 3904  instruction_syseval(struct_processus *s_ Line 3894  instruction_syseval(struct_processus *s_
                     while(write_atomic(s_etat_processus,                      while(write_atomic(s_etat_processus,
                             pipes_entree[1], "\n", 1) != 1)                              pipes_entree[1], "\n", 1) != 1)
                     {                      {
                         if (pthread_mutex_lock(&((*s_etat_processus)                          if (sem_wait(&((*s_etat_processus)
                                 .mutex_fork)) != 0)                                  .semaphore_fork)) != 0)
                         {                          {
                             (*s_etat_processus).erreur_systeme =                              (*s_etat_processus).erreur_systeme =
                                     d_es_processus;                                      d_es_processus;
Line 3918  instruction_syseval(struct_processus *s_ Line 3908  instruction_syseval(struct_processus *s_
                             return;                              return;
                         }                          }
   
                         if (pthread_mutex_unlock(&((*s_etat_processus)                          if (sem_post(&((*s_etat_processus)
                                 .mutex_fork)) != 0)                                  .semaphore_fork)) != 0)
                         {                          {
                             (*s_etat_processus).erreur_systeme = d_es_processus;                              (*s_etat_processus).erreur_systeme = d_es_processus;
                             return;                              return;
                         }                          }
                     }                      }
   
                     if (pthread_mutex_lock(&((*s_etat_processus).mutex_fork))                      if (sem_wait(&((*s_etat_processus).semaphore_fork)) != 0)
                             != 0)  
                     {                      {
                         (*s_etat_processus).erreur_systeme = d_es_processus;                          (*s_etat_processus).erreur_systeme = d_es_processus;
                         return;                          return;
Line 3954  instruction_syseval(struct_processus *s_ Line 3943  instruction_syseval(struct_processus *s_
                  * Récupération de la valeur de retour du processus détaché                   * Récupération de la valeur de retour du processus détaché
                  */                   */
   
                 if (pthread_mutex_unlock(&((*s_etat_processus).mutex_fork))                  if (sem_post(&((*s_etat_processus).semaphore_fork)) != 0)
                         != 0)  
                 {                  {
                     (*s_etat_processus).erreur_systeme = d_es_processus;                      (*s_etat_processus).erreur_systeme = d_es_processus;
                     return;                      return;
Line 3963  instruction_syseval(struct_processus *s_ Line 3951  instruction_syseval(struct_processus *s_
   
                 if (waitpid(pid, &status, 0) == -1)                  if (waitpid(pid, &status, 0) == -1)
                 {                  {
                     if (pthread_mutex_lock(&((*s_etat_processus).mutex_fork))                      if (sem_post(&((*s_etat_processus).semaphore_fork)) != 0)
                             != 0)  
                     {                      {
                         (*s_etat_processus).erreur_systeme = d_es_processus;                          (*s_etat_processus).erreur_systeme = d_es_processus;
                         return;                          return;
Line 3974  instruction_syseval(struct_processus *s_ Line 3961  instruction_syseval(struct_processus *s_
                     return;                      return;
                 }                  }
   
                 if (pthread_mutex_lock(&((*s_etat_processus).mutex_fork)) != 0)                  if (sem_wait(&((*s_etat_processus).semaphore_fork)) != 0)
                 {                  {
                     (*s_etat_processus).erreur_systeme = d_es_processus;                      (*s_etat_processus).erreur_systeme = d_es_processus;
                     return;                      return;
Line 3992  instruction_syseval(struct_processus *s_ Line 3979  instruction_syseval(struct_processus *s_
                 return;                  return;
             }              }
   
             if (pthread_mutex_unlock(&((*s_etat_processus).mutex_fork)) != 0)              if (sem_post(&((*s_etat_processus).semaphore_fork)) != 0)
             {              {
                 (*s_etat_processus).erreur_systeme = d_es_processus;                  (*s_etat_processus).erreur_systeme = d_es_processus;
                 return;                  return;
Line 4002  instruction_syseval(struct_processus *s_ Line 3989  instruction_syseval(struct_processus *s_
                     pipes_sortie[0], &(tampon[pointeur]),                      pipes_sortie[0], &(tampon[pointeur]),
                     longueur_lecture)) > 0)                      longueur_lecture)) > 0)
             {              {
                 while(pthread_mutex_lock(&((*s_etat_processus).mutex_fork))                  while(sem_wait(&((*s_etat_processus).semaphore_fork))
                         != 0)                          != 0)
                 {                  {
                     (*s_etat_processus).erreur_systeme = d_es_processus;                      (*s_etat_processus).erreur_systeme = d_es_processus;
Line 4022  instruction_syseval(struct_processus *s_ Line 4009  instruction_syseval(struct_processus *s_
                     return;                      return;
                 }                  }
   
                 if (pthread_mutex_unlock(&((*s_etat_processus).mutex_fork))                  if (sem_post(&((*s_etat_processus).semaphore_fork))
                         != 0)                          != 0)
                 {                  {
                     (*s_etat_processus).erreur_systeme = d_es_processus;                      (*s_etat_processus).erreur_systeme = d_es_processus;
Line 4030  instruction_syseval(struct_processus *s_ Line 4017  instruction_syseval(struct_processus *s_
                 }                  }
             }              }
   
             if (pthread_mutex_lock(&((*s_etat_processus).mutex_fork)) != 0)              if (sem_wait(&((*s_etat_processus).semaphore_fork)) != 0)
             {              {
                 (*s_etat_processus).erreur_systeme = d_es_processus;                  (*s_etat_processus).erreur_systeme = d_es_processus;
                 return;                  return;
Line 4175  instruction_syseval(struct_processus *s_ Line 4162  instruction_syseval(struct_processus *s_
             return;              return;
         }          }
     
         if (pthread_mutex_unlock(&((*s_etat_processus).mutex_fork)) != 0)          if (sem_post(&((*s_etat_processus).semaphore_fork)) != 0)
         {          {
             (*s_etat_processus).erreur_systeme = d_es_processus;              (*s_etat_processus).erreur_systeme = d_es_processus;
             return;              return;
Line 4192  instruction_syseval(struct_processus *s_ Line 4179  instruction_syseval(struct_processus *s_
                 &((*s_etat_processus).l_base_pile), s_objet_resultat)                  &((*s_etat_processus).l_base_pile), s_objet_resultat)
                 == d_erreur)                  == d_erreur)
         {          {
             if (pthread_mutex_lock(&((*s_etat_processus).mutex_fork)) != 0)              if (sem_wait(&((*s_etat_processus).semaphore_fork)) != 0)
             {              {
                 (*s_etat_processus).erreur_systeme = d_es_processus;                  (*s_etat_processus).erreur_systeme = d_es_processus;
                 return;                  return;
Line 4208  instruction_syseval(struct_processus *s_ Line 4195  instruction_syseval(struct_processus *s_
             return;              return;
         }          }
   
         if (pthread_mutex_lock(&((*s_etat_processus).mutex_fork)) != 0)          if (sem_wait(&((*s_etat_processus).semaphore_fork)) != 0)
         {          {
             (*s_etat_processus).erreur_systeme = d_es_processus;              (*s_etat_processus).erreur_systeme = d_es_processus;
             return;              return;

Removed from v.1.37  
changed lines
  Added in v.1.39


CVSweb interface <joel.bertrand@systella.fr>