Diff for /rpl/src/interruptions.c between versions 1.71 and 1.72

version 1.71, 2011/09/15 19:30:38 version 1.72, 2011/09/18 12:42:50
Line 2251  scrutation_interruptions(struct_processu Line 2251  scrutation_interruptions(struct_processu
     // à lire. Les pointeurs d'écriture pointent sur les prochains éléments à      // à lire. Les pointeurs d'écriture pointent sur les prochains éléments à
     // écrire.      // écrire.
   
     if (sem_trywait(&((*s_queue_signaux).semaphore)) == 0)  #   ifndef SEMAPHORES_NOMMES
           if (sem_trywait(&((*s_queue_signaux).semaphore)) == 0)
   #   else
           if (sem_trywait(semaphore_queue_signaux) == 0)
   #   endif
     {      {
         if ((*s_queue_signaux).pointeur_lecture !=          if ((*s_queue_signaux).pointeur_lecture !=
                 (*s_queue_signaux).pointeur_ecriture)                  (*s_queue_signaux).pointeur_ecriture)
Line 2268  scrutation_interruptions(struct_processu Line 2272  scrutation_interruptions(struct_processu
                     % LONGUEUR_QUEUE_SIGNAUX;                      % LONGUEUR_QUEUE_SIGNAUX;
         }          }
   
         sem_post(&((*s_queue_signaux).semaphore));  #       ifndef SEMAPHORES_NOMMES
               sem_post(&((*s_queue_signaux).semaphore));
   #       else
               sem_post(semaphore_queue_signaux);
   #       endif
     }      }
   
     // Interruptions qui arrivent depuis le groupe courant de threads.      // Interruptions qui arrivent depuis le groupe courant de threads.
Line 2364  envoi_signal_processus(pid_t pid, enum s Line 2372  envoi_signal_processus(pid_t pid, enum s
 {  {
     int                             segment;      int                             segment;
   
       sem_t                           *semaphore;
   
     struct_queue_signaux            *queue;      struct_queue_signaux            *queue;
   
     unsigned char                   *nom;      unsigned char                   *nom;
Line 2380  envoi_signal_processus(pid_t pid, enum s Line 2390  envoi_signal_processus(pid_t pid, enum s
             return(1);              return(1);
         }          }
   
         if (sem_wait(&((*s_queue_signaux).semaphore)) != 0)  #       ifndef SEMAPHORES_NOMMES
               if (sem_wait(&((*s_queue_signaux).semaphore)) != 0)
   #       else
               if (sem_wait(semaphore_queue_signaux) != 0)
   #       endif
         {          {
             return(1);              return(1);
         }          }
Line 2394  envoi_signal_processus(pid_t pid, enum s Line 2408  envoi_signal_processus(pid_t pid, enum s
                 ((*s_queue_signaux).pointeur_ecriture + 1)                  ((*s_queue_signaux).pointeur_ecriture + 1)
                 % LONGUEUR_QUEUE_SIGNAUX;                  % LONGUEUR_QUEUE_SIGNAUX;
   
         if (sem_post(&((*s_queue_signaux).semaphore)) != 0)  #       ifndef SEMAPHORES_NOMMES
               if (sem_post(&((*s_queue_signaux).semaphore)) != 0)
   #       else
               if (sem_post(semaphore_queue_signaux) != 0)
   #       endif
         {          {
             return(1);              return(1);
         }          }
Line 2424  envoi_signal_processus(pid_t pid, enum s Line 2442  envoi_signal_processus(pid_t pid, enum s
             return(1);              return(1);
         }          }
   
         if (sem_wait(&((*queue).semaphore)) != 0)  #       ifndef SEMAPHORES_NOMMES
         {              if (sem_wait(&((*queue).semaphore)) != 0)
             return(1);              {
         }                  return(1);
               }
   #       else
               if ((semaphore = sem_open2(pid)) == SEM_FAILED)
               {
                   return(1);
               }
   
               if (sem_wait(semaphore) != 0)
               {
                   sem_close(semaphore);
                   return(1);
               }
   #       endif
   
         (*queue).queue[(*queue).pointeur_ecriture].pid = getpid();          (*queue).queue[(*queue).pointeur_ecriture].pid = getpid();
         (*queue).queue[(*queue).pointeur_ecriture].signal = signal;          (*queue).queue[(*queue).pointeur_ecriture].signal = signal;
Line 2435  envoi_signal_processus(pid_t pid, enum s Line 2466  envoi_signal_processus(pid_t pid, enum s
         (*queue).pointeur_ecriture = ((*queue).pointeur_ecriture + 1)          (*queue).pointeur_ecriture = ((*queue).pointeur_ecriture + 1)
                 % LONGUEUR_QUEUE_SIGNAUX;                  % LONGUEUR_QUEUE_SIGNAUX;
   
         if (sem_post(&((*queue).semaphore)) != 0)  #       ifndef SEMAPHORES_NOMMES
         {              if (sem_post(&((*queue).semaphore)) != 0)
             return(1);              {
         }                  return(1);
               }
   #       else
               if (sem_post(semaphore) != 0)
               {
                   sem_close(semaphore);
                   return(1);
               }
   
               if (sem_close(semaphore) != 0)
               {
                   reeturn(1);
               }
   #       endif
   
         if (munmap(queue, sizeof(struct_queue_signaux)) != 0)          if (munmap(queue, sizeof(struct_queue_signaux)) != 0)
         {          {
Line 2596  creation_queue_signaux(struct_processus Line 2640  creation_queue_signaux(struct_processus
 #       ifndef SEMAPHORES_NOMMES  #       ifndef SEMAPHORES_NOMMES
             sem_init(&((*s_queue_signaux).semaphore), 1, 1);              sem_init(&((*s_queue_signaux).semaphore), 1, 1);
 #       else  #       else
             (*s_queue_signaux).semaphore = sem_init2(0,              if ((semaphore_queue_signaux = sem_init2(0, getpid()))
                     sem_gestionnaires_signaux);                      == SEM_FAILED)
   
             if ((*s_queue_signaux).semaphore == SEM_FAILED)  
             {              {
                 (*s_etat_processus).erreur_systeme = d_es_processus;                  (*s_etat_processus).erreur_systeme = d_es_processus;
                 return;                  return;
Line 2716  liberation_queue_signaux(struct_processu Line 2758  liberation_queue_signaux(struct_processu
 #       else // OS/2  #       else // OS/2
 #       endif  #       endif
 #   else // POSIX  #   else // POSIX
         sem_close(&((*s_queue_signaux).semaphore));  #       ifndef SEMAPHORES_NOMMES
               sem_close(&((*s_queue_signaux).semaphore));
   #       else
               sem_close(semaphore_queue_signaux);
   #       endif
   
         if (munmap(s_queue_signaux, sizeof(struct_queue_signaux)) != 0)          if (munmap(s_queue_signaux, sizeof(struct_queue_signaux)) != 0)
         {          {
Line 2785  destruction_queue_signaux(struct_process Line 2831  destruction_queue_signaux(struct_process
   
 #       endif  #       endif
 #   else // POSIX  #   else // POSIX
         sem_close(&((*s_queue_signaux).semaphore));  #       ifndef SEMAPHORES_NOMMES
         sem_destroy(&((*s_queue_signaux).semaphore));              sem_close(&((*s_queue_signaux).semaphore));
               sem_destroy(&((*s_queue_signaux).semaphore));
   #       else
               sem_close(semaphore_queue_signaux);
               sem_destroy2(semaphore_queue_signaux, getpid());
   #       endif
   
         if (munmap(s_queue_signaux, sizeof(struct_queue_signaux)) != 0)          if (munmap(s_queue_signaux, sizeof(struct_queue_signaux)) != 0)
         {          {

Removed from v.1.71  
changed lines
  Added in v.1.72


CVSweb interface <joel.bertrand@systella.fr>