Diff for /rpl/src/interruptions.c between versions 1.180 and 1.182

version 1.180, 2016/07/20 16:23:59 version 1.182, 2016/07/22 14:44:11
Line 93  thread_surveillance_signaux(void *argume Line 93  thread_surveillance_signaux(void *argume
   
         if (sem_wait(semaphore_signalisation) == 0)          if (sem_wait(semaphore_signalisation) == 0)
         {          {
             if (sem_wait(semaphore_arret_signalisation) != 0)              while((ios = sem_wait(semaphore_arret_signalisation)) != 0)
             {              {
                 (*s_etat_processus).erreur_systeme = d_es_processus;                  if (errno != EINTR)
                   {
                       (*s_etat_processus).erreur_systeme = d_es_processus;
                   }
             }              }
   
             if ((*s_queue_signaux).requete_arret == d_vrai)              if ((*s_queue_signaux).requete_arret == d_vrai)
Line 3422  creation_queue_signaux(struct_processus Line 3425  creation_queue_signaux(struct_processus
         return;          return;
     }      }
   
       (*s_queue_signaux).controle = getpid();
   
     if (pthread_create(&((*s_queue_signaux).thread_signaux), &attributs,      if (pthread_create(&((*s_queue_signaux).thread_signaux), &attributs,
             thread_surveillance_signaux, s_etat_processus) != 0)              thread_surveillance_signaux, s_etat_processus) != 0)
     {      {
Line 3435  creation_queue_signaux(struct_processus Line 3440  creation_queue_signaux(struct_processus
         return;          return;
     }      }
   
     (*s_queue_signaux).controle = getpid();  
   
 #   ifndef IPCS_SYSV  #   ifndef IPCS_SYSV
     if (msync(s_queue_signaux, sizeof(s_queue_signaux),      if (msync(s_queue_signaux, sizeof(s_queue_signaux),
             MS_ASYNC | MS_INVALIDATE) != 0)              MS_ASYNC | MS_INVALIDATE) != 0)
Line 3519  destruction_queue_signaux(struct_process Line 3522  destruction_queue_signaux(struct_process
         unsigned char       *nom;          unsigned char       *nom;
 #   endif  #   endif
   
     sem_wait(semaphore_arret_signalisation);      while(sem_wait(semaphore_arret_signalisation) != 0)
       {
           if (errno != EINTR)
           {
               (*s_etat_processus).erreur_systeme = d_es_processus;
               return;
           }
       }
   
     (*s_queue_signaux).requete_arret = d_vrai;      (*s_queue_signaux).requete_arret = d_vrai;
   
 #   ifndef IPCS_SYSV  #   ifndef IPCS_SYSV
Line 3531  destruction_queue_signaux(struct_process Line 3542  destruction_queue_signaux(struct_process
     // Incrémenter le sémaphore pour être sûr de le débloquer.      // Incrémenter le sémaphore pour être sûr de le débloquer.
   
     sem_post(semaphore_signalisation);      sem_post(semaphore_signalisation);
     pthread_join((*s_queue_signaux).thread_signaux, NULL);  
       if ((*s_queue_signaux).controle == getpid())
       {
           pthread_join((*s_queue_signaux).thread_signaux, NULL);
       }
       else
       {
           (*s_etat_processus).erreur_systeme = d_es_processus;
           return;
       }
   
     arret_thread_signaux(s_etat_processus);      arret_thread_signaux(s_etat_processus);
   
 #   ifdef IPCS_SYSV // SystemV  #   ifdef IPCS_SYSV // SystemV

Removed from v.1.180  
changed lines
  Added in v.1.182


CVSweb interface <joel.bertrand@systella.fr>