Diff for /rpl/src/interruptions.c between versions 1.173 and 1.179

version 1.173, 2016/03/22 09:22:23 version 1.179, 2016/04/06 21:14:56
Line 106  thread_surveillance_signaux(void *argume Line 106  thread_surveillance_signaux(void *argume
                 break;                  break;
             }              }
   
             sem_post(semaphore_arret_signalisation);  
             sem_post(semaphore_signalisation);              sem_post(semaphore_signalisation);
   
             nombre_signaux_envoyes = 0;              nombre_signaux_envoyes = 0;
Line 138  thread_surveillance_signaux(void *argume Line 137  thread_surveillance_signaux(void *argume
             }              }
   
             sem_post(semaphore_queue_signaux);              sem_post(semaphore_queue_signaux);
               sem_post(semaphore_arret_signalisation);
   
             // Dans un second temps, on balaye toutes les queues de signaux              // Dans un second temps, on balaye toutes les queues de signaux
             // des threads du processus courant.              // des threads du processus courant.
Line 2480  scrutation_interruptions(struct_processu Line 2480  scrutation_interruptions(struct_processu
             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)
             {              {
                   sem_post(semaphore_queue_signaux);
                 (*s_etat_processus).erreur_systeme = d_es_processus;                  (*s_etat_processus).erreur_systeme = d_es_processus;
                 return;                  return;
             }              }
Line 2731  envoi_signal_processus(pid_t pid, enum s Line 2732  envoi_signal_processus(pid_t pid, enum s
   
                 queue = shmat(segment, NULL, 0);                  queue = shmat(segment, NULL, 0);
 #           else // OS/2  #           else // OS/2
                 if (DosGetNamedSharedMem((PVOID) &queue, nom,                  if (test_ouverture == d_vrai)
                         PAG_WRITE | PAG_READ) != 0)  
                 {                  {
                     sys_free(nom);                      attente.tv_sec = 0;
                     return(1);                      attente.tv_nsec = GRANULARITE_us * 1000;
   
                       while(DosGetNamedSharedMem((PVOID) &queue, nom,
                               PAG_WRITE | PAG_READ) != 0)
                       {
                           nanosleep(&attente, NULL);
                           INCR_GRANULARITE(attente.tv_nsec);
                       }
                   }
                   else
                   {
                       if (DosGetNamedSharedMem((PVOID) &queue, nom,
                               PAG_WRITE | PAG_READ) != 0)
                       {
                           sys_free(nom);
                           return(1);
                       }
                 }                  }
   
                 sys_free(nom);                  sys_free(nom);
Line 2786  envoi_signal_processus(pid_t pid, enum s Line 2802  envoi_signal_processus(pid_t pid, enum s
                 if (msync(queue, sizeof(queue), MS_ASYNC | MS_INVALIDATE) != 0)                  if (msync(queue, sizeof(queue), MS_ASYNC | MS_INVALIDATE) != 0)
                 {                  {
                     munmap(queue, sizeof(struct_queue_signaux));                      munmap(queue, sizeof(struct_queue_signaux));
                       close(segment);
                     return(1);                      return(1);
                 }                  }
   
Line 2794  envoi_signal_processus(pid_t pid, enum s Line 2811  envoi_signal_processus(pid_t pid, enum s
                     close(segment);                      close(segment);
                     return(1);                      return(1);
                 }                  }
   
                   close(segment);
 #           else // IPCS_SYSV  #           else // IPCS_SYSV
 #               ifndef OS2 // SysV  #               ifndef OS2 // SysV
                     if (shmdt(queue) != 0)                      if (shmdt(queue) != 0)
Line 2804  envoi_signal_processus(pid_t pid, enum s Line 2823  envoi_signal_processus(pid_t pid, enum s
                     // Pendant de DosGetNamedSHaredMem()                      // Pendant de DosGetNamedSHaredMem()
 #               endif  #               endif
 #           endif  #           endif
   
             return(1);              return(1);
         }          }
   
Line 2815  envoi_signal_processus(pid_t pid, enum s Line 2833  envoi_signal_processus(pid_t pid, enum s
                 if (msync(queue, sizeof(queue), MS_ASYNC | MS_INVALIDATE) != 0)                  if (msync(queue, sizeof(queue), MS_ASYNC | MS_INVALIDATE) != 0)
                 {                  {
                     munmap(queue, sizeof(struct_queue_signaux));                      munmap(queue, sizeof(struct_queue_signaux));
                       close(segment);
                       sem_close(semaphore);
                     return(1);                      return(1);
                 }                  }
   
                 if (munmap(queue, sizeof(struct_queue_signaux)) != 0)                  if (munmap(queue, sizeof(struct_queue_signaux)) != 0)
                 {                  {
                     close(segment);                      close(segment);
                       sem_close(semaphore);
                     return(1);                      return(1);
                 }                  }
   
                   close(segment);
 #           else // IPCS_SYSV  #           else // IPCS_SYSV
 #               ifndef OS2 // SysV  #               ifndef OS2 // SysV
                     if (shmdt(queue) != 0)                      if (shmdt(queue) != 0)
                     {                      {
                           sem_close(semaphore);
                         return(1);                          return(1);
                     }                      }
 #               else // OS/2  #               else // OS/2
Line 2847  envoi_signal_processus(pid_t pid, enum s Line 2871  envoi_signal_processus(pid_t pid, enum s
                             != 0)                              != 0)
                     {                      {
                         munmap(queue, sizeof(struct_queue_signaux));                          munmap(queue, sizeof(struct_queue_signaux));
                           sem_close(semaphore);
                           sem_close(signalisation);
                           close(segment);
                         return(1);                          return(1);
                     }                      }
   
                     if (munmap(queue, sizeof(struct_queue_signaux)) != 0)                      if (munmap(queue, sizeof(struct_queue_signaux)) != 0)
                     {                      {
                           sem_close(semaphore);
                           sem_close(signalisation);
                         close(segment);                          close(segment);
                     return(1);                          return(1);
                 }                      }
   
                       close(segment);
 #               else // IPCS_SYSV  #               else // IPCS_SYSV
 #                   ifndef OS2 // SysV  #                   ifndef OS2 // SysV
                         if (shmdt(queue) != 0)                          if (shmdt(queue) != 0)
                         {                          {
                               sem_close(semaphore);
                               sem_close(signalisation);
                             return(1);                              return(1);
                         }                          }
 #                   else // OS/2  #                   else // OS/2
Line 2884  envoi_signal_processus(pid_t pid, enum s Line 2917  envoi_signal_processus(pid_t pid, enum s
                 if (msync(queue, sizeof(queue), MS_ASYNC | MS_INVALIDATE) != 0)                  if (msync(queue, sizeof(queue), MS_ASYNC | MS_INVALIDATE) != 0)
                 {                  {
                     munmap(queue, sizeof(struct_queue_signaux));                      munmap(queue, sizeof(struct_queue_signaux));
                       close(segment);
                       sem_close(semaphore);
                       sem_close(signalisation);
                     return(1);                      return(1);
                 }                  }
   
                 if (munmap(queue, sizeof(struct_queue_signaux)) != 0)                  if (munmap(queue, sizeof(struct_queue_signaux)) != 0)
                 {                  {
                     close(segment);                      close(segment);
                       sem_close(semaphore);
                       sem_close(signalisation);
                     return(1);                      return(1);
                 }                  }
   
                   close(segment);
 #           else // IPCS_SYSV  #           else // IPCS_SYSV
 #               ifndef OS2 // SysV  #               ifndef OS2 // SysV
                     if (shmdt(queue) != 0)                      if (shmdt(queue) != 0)
                     {                      {
                           sem_close(semaphore);
                           sem_close(signalisation);
                         return(1);                          return(1);
                     }                      }
 #               else // OS/2  #               else // OS/2
Line 2914  envoi_signal_processus(pid_t pid, enum s Line 2956  envoi_signal_processus(pid_t pid, enum s
                 if (msync(queue, sizeof(queue), MS_ASYNC | MS_INVALIDATE) != 0)                  if (msync(queue, sizeof(queue), MS_ASYNC | MS_INVALIDATE) != 0)
                 {                  {
                     munmap(queue, sizeof(struct_queue_signaux));                      munmap(queue, sizeof(struct_queue_signaux));
                       close(segment);
                       sem_close(signalisation);
                     return(1);                      return(1);
                 }                  }
   
                 if (munmap(queue, sizeof(struct_queue_signaux)) != 0)                  if (munmap(queue, sizeof(struct_queue_signaux)) != 0)
                 {                  {
                     close(segment);                      close(segment);
                       sem_close(signalisation);
                     return(1);                      return(1);
                 }                  }
   
                   close(segment);
 #           else // IPCS_SYSV  #           else // IPCS_SYSV
 #               ifndef OS2 // SysV  #               ifndef OS2 // SysV
                     if (shmdt(queue) != 0)                      if (shmdt(queue) != 0)
                     {                      {
                           sem_close(signalisation);
                         return(1);                          return(1);
                     }                      }
 #               else // OS/2  #               else // OS/2
Line 2943  envoi_signal_processus(pid_t pid, enum s Line 2991  envoi_signal_processus(pid_t pid, enum s
                 if (msync(queue, sizeof(queue), MS_ASYNC | MS_INVALIDATE) != 0)                  if (msync(queue, sizeof(queue), MS_ASYNC | MS_INVALIDATE) != 0)
                 {                  {
                     munmap(queue, sizeof(struct_queue_signaux));                      munmap(queue, sizeof(struct_queue_signaux));
                       close(segment);
                       sem_close(signalisation);
                     return(1);                      return(1);
                 }                  }
   
                 if (munmap(queue, sizeof(struct_queue_signaux)) != 0)                  if (munmap(queue, sizeof(struct_queue_signaux)) != 0)
                 {                  {
                     close(segment);                      close(segment);
                       sem_close(signalisation);
                     return(1);                      return(1);
                 }                  }
   
                   close(segment);
 #           else // IPCS_SYSV  #           else // IPCS_SYSV
 #               ifndef OS2 // SysV  #               ifndef OS2 // SysV
                     if (shmdt(queue) != 0)                      if (shmdt(queue) != 0)
                     {                      {
                           sem_close(signalisation);
                         return(1);                          return(1);
                     }                      }
 #               else // OS/2  #               else // OS/2
Line 2972  envoi_signal_processus(pid_t pid, enum s Line 3026  envoi_signal_processus(pid_t pid, enum s
                 if (msync(queue, sizeof(queue), MS_ASYNC | MS_INVALIDATE) != 0)                  if (msync(queue, sizeof(queue), MS_ASYNC | MS_INVALIDATE) != 0)
                 {                  {
                     munmap(queue, sizeof(struct_queue_signaux));                      munmap(queue, sizeof(struct_queue_signaux));
                       close(segment);
                     return(1);                      return(1);
                 }                  }
   
Line 2980  envoi_signal_processus(pid_t pid, enum s Line 3035  envoi_signal_processus(pid_t pid, enum s
                     close(segment);                      close(segment);
                     return(1);                      return(1);
                 }                  }
   
                   close(segment);
 #           else // IPCS_SYSV  #           else // IPCS_SYSV
 #               ifndef OS2 // SysV  #               ifndef OS2 // SysV
                     if (shmdt(queue) != 0)                      if (shmdt(queue) != 0)
Line 2998  envoi_signal_processus(pid_t pid, enum s Line 3055  envoi_signal_processus(pid_t pid, enum s
             if (msync(queue, sizeof(queue), MS_ASYNC | MS_INVALIDATE) != 0)              if (msync(queue, sizeof(queue), MS_ASYNC | MS_INVALIDATE) != 0)
             {              {
                 munmap(queue, sizeof(struct_queue_signaux));                  munmap(queue, sizeof(struct_queue_signaux));
                   close(segment);
                 return(1);                  return(1);
             }              }
   
Line 3008  envoi_signal_processus(pid_t pid, enum s Line 3066  envoi_signal_processus(pid_t pid, enum s
             }              }
   
             close(segment);              close(segment);
   
 #       else // IPCS_SYSV  #       else // IPCS_SYSV
 #           ifndef OS2 // SysV  #           ifndef OS2 // SysV
                 if (shmdt(queue) != 0)                  if (shmdt(queue) != 0)
Line 3428  creation_queue_signaux(struct_processus Line 3485  creation_queue_signaux(struct_processus
 void  void
 liberation_queue_signaux(struct_processus *s_etat_processus)  liberation_queue_signaux(struct_processus *s_etat_processus)
 {  {
     sem_wait(semaphore_arret_signalisation);  
     (*s_queue_signaux).requete_arret = d_vrai;  
   
 #   ifndef IPCS_SYSV  
     msync(s_queue_signaux, sizeof(s_queue_signaux), MS_ASYNC | MS_INVALIDATE);  
 #   endif  
   
     sem_post(semaphore_arret_signalisation);  
   
     // Incrémenter le sémaphore pour être sûr de le débloquer.  
   
     sem_post(semaphore_signalisation);  
   
     if (getpid() == (*s_queue_signaux).controle)  
     {  
         arret_thread_signaux(s_etat_processus);  
         pthread_join((*s_queue_signaux).thread_signaux, NULL);  
     }  
   
 #   ifdef IPCS_SYSV // SystemV  #   ifdef IPCS_SYSV // SystemV
 #       ifndef OS2  #       ifndef OS2
             if (shmdt(s_queue_signaux) == -1)              if (shmdt(s_queue_signaux) == -1)
Line 3506  destruction_queue_signaux(struct_process Line 3544  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);
     arret_thread_signaux(s_etat_processus);  
     pthread_join((*s_queue_signaux).thread_signaux, NULL);      pthread_join((*s_queue_signaux).thread_signaux, NULL);
       arret_thread_signaux(s_etat_processus);
   
 #   ifdef IPCS_SYSV // SystemV  #   ifdef IPCS_SYSV // SystemV
 #       ifndef OS2  #       ifndef OS2

Removed from v.1.173  
changed lines
  Added in v.1.179


CVSweb interface <joel.bertrand@systella.fr>