Diff for /rpl/src/instructions_s8.c between versions 1.35 and 1.37

version 1.35, 2011/09/15 17:51:43 version 1.37, 2011/09/20 09:51:43
Line 247  instruction_send(struct_processus *s_eta Line 247  instruction_send(struct_processus *s_eta
         attente.tv_sec = 0;          attente.tv_sec = 0;
         attente.tv_nsec = GRANULARITE_us * 1000;          attente.tv_nsec = GRANULARITE_us * 1000;
   
         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 257  instruction_send(struct_processus *s_eta Line 257  instruction_send(struct_processus *s_eta
                 (*s_etat_processus).pipe_nombre_objets_attente,                  (*s_etat_processus).pipe_nombre_objets_attente,
                 &pid, sizeof(pid))) != sizeof(pid))                  &pid, sizeof(pid))) != sizeof(pid))
         {          {
             if (pthread_mutex_lock(&((*s_etat_processus).mutex_fork)) != 0)              while(sem_wait(&((*s_etat_processus).semaphore_fork)) != 0)
             {              {
                 (*s_etat_processus).erreur_systeme = d_es_processus;                  if (errno != EINTR)
                 return;                  {
                       (*s_etat_processus).erreur_systeme = d_es_processus;
                       return;
                   }
             }              }
   
             if (longueur_ecriture == -1)              if (longueur_ecriture == -1)
Line 277  instruction_send(struct_processus *s_eta Line 280  instruction_send(struct_processus *s_eta
             nanosleep(&attente, NULL);              nanosleep(&attente, NULL);
             INCR_GRANULARITE(attente.tv_nsec);              INCR_GRANULARITE(attente.tv_nsec);
   
             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 296  instruction_send(struct_processus *s_eta Line 299  instruction_send(struct_processus *s_eta
                 (*s_etat_processus).pipe_nombre_objets_attente,                  (*s_etat_processus).pipe_nombre_objets_attente,
                 &pid, sizeof(pid))) != sizeof(pid))                  &pid, sizeof(pid))) != sizeof(pid))
         {          {
             if (pthread_mutex_lock(&((*s_etat_processus).mutex_fork)) != 0)              while(sem_wait(&((*s_etat_processus).semaphore_fork)) != 0)
             {              {
                 (*s_etat_processus).erreur_systeme = d_es_processus;                  if (errno != EINTR)
                 return;                  {
                       (*s_etat_processus).erreur_systeme = d_es_processus;
                       return;
                   }
             }              }
   
             if (longueur_ecriture == -1)              if (longueur_ecriture == -1)
Line 316  instruction_send(struct_processus *s_eta Line 322  instruction_send(struct_processus *s_eta
             nanosleep(&attente, NULL);              nanosleep(&attente, NULL);
             INCR_GRANULARITE(attente.tv_nsec);              INCR_GRANULARITE(attente.tv_nsec);
   
             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 325  instruction_send(struct_processus *s_eta Line 331  instruction_send(struct_processus *s_eta
             scrutation_interruptions(s_etat_processus);              scrutation_interruptions(s_etat_processus);
         }          }
   
         if (pthread_mutex_lock(&((*s_etat_processus).mutex_fork)) != 0)          while(sem_wait(&((*s_etat_processus).semaphore_fork)) != 0)
         {          {
             (*s_etat_processus).erreur_systeme = d_es_processus;              if (errno != EINTR)
             return;              {
                   (*s_etat_processus).erreur_systeme = d_es_processus;
                   return;
               }
         }          }
     }      }
     else      else
Line 348  instruction_send(struct_processus *s_eta Line 357  instruction_send(struct_processus *s_eta
         attente.tv_sec = 0;          attente.tv_sec = 0;
         attente.tv_nsec = GRANULARITE_us * 1000;          attente.tv_nsec = GRANULARITE_us * 1000;
   
         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 358  instruction_send(struct_processus *s_eta Line 367  instruction_send(struct_processus *s_eta
                 (*s_etat_processus).pipe_nombre_objets_attente,                  (*s_etat_processus).pipe_nombre_objets_attente,
                 &tid, sizeof(tid))) != sizeof(tid))                  &tid, sizeof(tid))) != sizeof(tid))
         {          {
             while(pthread_mutex_lock(&((*s_etat_processus).mutex_fork)) != 0)              while(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 378  instruction_send(struct_processus *s_eta Line 387  instruction_send(struct_processus *s_eta
             nanosleep(&attente, NULL);              nanosleep(&attente, NULL);
             INCR_GRANULARITE(attente.tv_nsec);              INCR_GRANULARITE(attente.tv_nsec);
   
             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 396  instruction_send(struct_processus *s_eta Line 405  instruction_send(struct_processus *s_eta
                 (*s_etat_processus).pipe_nombre_objets_attente,                  (*s_etat_processus).pipe_nombre_objets_attente,
                 &tid, sizeof(tid))) != sizeof(tid))                  &tid, sizeof(tid))) != sizeof(tid))
         {          {
             if (pthread_mutex_lock(&((*s_etat_processus).mutex_fork)) != 0)              while(sem_wait(&((*s_etat_processus).semaphore_fork)) != 0)
             {              {
                 (*s_etat_processus).erreur_systeme = d_es_processus;                  if (errno != EINTR)
                 return;                  {
                       (*s_etat_processus).erreur_systeme = d_es_processus;
                       return;
                   }
             }              }
   
             if (longueur_ecriture == -1)              if (longueur_ecriture == -1)
Line 416  instruction_send(struct_processus *s_eta Line 428  instruction_send(struct_processus *s_eta
             nanosleep(&attente, NULL);              nanosleep(&attente, NULL);
             INCR_GRANULARITE(attente.tv_nsec);              INCR_GRANULARITE(attente.tv_nsec);
   
             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 425  instruction_send(struct_processus *s_eta Line 437  instruction_send(struct_processus *s_eta
             scrutation_interruptions(s_etat_processus);              scrutation_interruptions(s_etat_processus);
         }          }
   
         if (pthread_mutex_lock(&((*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 437  instruction_send(struct_processus *s_eta Line 449  instruction_send(struct_processus *s_eta
     attente.tv_sec = 0;      attente.tv_sec = 0;
     attente.tv_nsec = GRANULARITE_us * 1000;      attente.tv_nsec = GRANULARITE_us * 1000;
   
     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 446  instruction_send(struct_processus *s_eta Line 458  instruction_send(struct_processus *s_eta
     while(read_atomic(s_etat_processus, (*s_etat_processus).pipe_acquittement,      while(read_atomic(s_etat_processus, (*s_etat_processus).pipe_acquittement,
             &tampon, sizeof(unsigned char)) != sizeof(unsigned char))              &tampon, sizeof(unsigned char)) != sizeof(unsigned char))
     {      {
         if (pthread_mutex_lock(&((*s_etat_processus).mutex_fork)) != 0)          while(sem_wait(&((*s_etat_processus).semaphore_fork)) != 0)
         {          {
             (*s_etat_processus).erreur_systeme = d_es_processus;              if (errno != EINTR)
             return;              {
                   (*s_etat_processus).erreur_systeme = d_es_processus;
                   return;
               }
         }          }
   
         nanosleep(&attente, NULL);          nanosleep(&attente, NULL);
         INCR_GRANULARITE(attente.tv_nsec);          INCR_GRANULARITE(attente.tv_nsec);
   
         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 464  instruction_send(struct_processus *s_eta Line 479  instruction_send(struct_processus *s_eta
         scrutation_interruptions(s_etat_processus);          scrutation_interruptions(s_etat_processus);
     }      }
   
     if (pthread_mutex_lock(&((*s_etat_processus).mutex_fork)) != 0)      while(sem_wait(&((*s_etat_processus).semaphore_fork)) != 0)
     {      {
         (*s_etat_processus).erreur_systeme = d_es_processus;          if (errno != EINTR)
         return;          {
               (*s_etat_processus).erreur_systeme = d_es_processus;
               return;
           }
     }      }
   
     // Envoi d'un PID invalide (-1) pour ne pas bloquer le thread      // Envoi d'un PID invalide (-1) pour ne pas bloquer le thread
Line 480  instruction_send(struct_processus *s_eta Line 498  instruction_send(struct_processus *s_eta
         attente.tv_sec = 0;          attente.tv_sec = 0;
         attente.tv_nsec = GRANULARITE_us * 1000;          attente.tv_nsec = GRANULARITE_us * 1000;
   
         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 490  instruction_send(struct_processus *s_eta Line 508  instruction_send(struct_processus *s_eta
                 (*s_etat_processus).pipe_nombre_interruptions_attente,                  (*s_etat_processus).pipe_nombre_interruptions_attente,
                 &pid, sizeof(pid))) != sizeof(pid))                  &pid, sizeof(pid))) != sizeof(pid))
         {          {
             if (pthread_mutex_lock(&((*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 510  instruction_send(struct_processus *s_eta Line 528  instruction_send(struct_processus *s_eta
             nanosleep(&attente, NULL);              nanosleep(&attente, NULL);
             INCR_GRANULARITE(attente.tv_nsec);              INCR_GRANULARITE(attente.tv_nsec);
   
             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;
             }              }
         }          }
   
         if (pthread_mutex_lock(&((*s_etat_processus).mutex_fork)) != 0)          while(sem_wait(&((*s_etat_processus).semaphore_fork)) != 0)
         {          {
             (*s_etat_processus).erreur_systeme = d_es_processus;              if (errno != EINTR)
             return;              {
                   (*s_etat_processus).erreur_systeme = d_es_processus;
                   return;
               }
         }          }
   
         scrutation_interruptions(s_etat_processus);          scrutation_interruptions(s_etat_processus);
Line 532  instruction_send(struct_processus *s_eta Line 553  instruction_send(struct_processus *s_eta
         attente.tv_sec = 0;          attente.tv_sec = 0;
         attente.tv_nsec = GRANULARITE_us * 1000;          attente.tv_nsec = GRANULARITE_us * 1000;
   
         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 542  instruction_send(struct_processus *s_eta Line 563  instruction_send(struct_processus *s_eta
                 (*s_etat_processus).pipe_nombre_interruptions_attente,                  (*s_etat_processus).pipe_nombre_interruptions_attente,
                 &tid, sizeof(tid))) != sizeof(tid))                  &tid, sizeof(tid))) != sizeof(tid))
         {          {
             if (pthread_mutex_lock(&((*s_etat_processus).mutex_fork)) != 0)              while(sem_wait(&((*s_etat_processus).semaphore_fork)) != 0)
             {              {
                 (*s_etat_processus).erreur_systeme = d_es_processus;                  if (errno != EINTR)
                 return;                  {
                       (*s_etat_processus).erreur_systeme = d_es_processus;
                       return;
                   }
             }              }
   
             if (longueur_ecriture == -1)              if (longueur_ecriture == -1)
Line 562  instruction_send(struct_processus *s_eta Line 586  instruction_send(struct_processus *s_eta
             nanosleep(&attente, NULL);              nanosleep(&attente, NULL);
             INCR_GRANULARITE(attente.tv_nsec);              INCR_GRANULARITE(attente.tv_nsec);
   
             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 571  instruction_send(struct_processus *s_eta Line 595  instruction_send(struct_processus *s_eta
             scrutation_interruptions(s_etat_processus);              scrutation_interruptions(s_etat_processus);
         }          }
   
         if (pthread_mutex_lock(&((*s_etat_processus).mutex_fork)) != 0)          while(sem_wait(&((*s_etat_processus).semaphore_fork)) != 0)
         {          {
             (*s_etat_processus).erreur_systeme = d_es_processus;              if (errno != EINTR)
             return;              {
                   (*s_etat_processus).erreur_systeme = d_es_processus;
                   return;
               }
         }          }
     }      }
   
     // ecriture_pipe() ne peut être interrompu par un signal.      // ecriture_pipe() ne peut être interrompu par un signal.
   
     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 589  instruction_send(struct_processus *s_eta Line 616  instruction_send(struct_processus *s_eta
     if (ecriture_pipe(s_etat_processus, (*s_etat_processus).pipe_donnees,      if (ecriture_pipe(s_etat_processus, (*s_etat_processus).pipe_donnees,
             s_objet) == d_erreur)              s_objet) == d_erreur)
     {      {
         if (pthread_mutex_lock(&((*s_etat_processus).mutex_fork)) != 0)          while(sem_wait(&((*s_etat_processus).semaphore_fork)) != 0)
         {          {
             (*s_etat_processus).erreur_systeme = d_es_processus;              if (errno != EINTR)
             return;              {
                   (*s_etat_processus).erreur_systeme = d_es_processus;
                   return;
               }
         }          }
   
         if ((*s_etat_processus).profilage == d_vrai)          if ((*s_etat_processus).profilage == d_vrai)
Line 604  instruction_send(struct_processus *s_eta Line 634  instruction_send(struct_processus *s_eta
         return;          return;
     }      }
   
     if (pthread_mutex_lock(&((*s_etat_processus).mutex_fork)) != 0)      while(sem_wait(&((*s_etat_processus).semaphore_fork)) != 0)
     {      {
         (*s_etat_processus).erreur_systeme = d_es_processus;          if (errno != EINTR)
         return;          {
               (*s_etat_processus).erreur_systeme = d_es_processus;
               return;
           }
     }      }
   
     if ((*s_etat_processus).profilage == d_vrai)      if ((*s_etat_processus).profilage == d_vrai)

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


CVSweb interface <joel.bertrand@systella.fr>