Diff for /rpl/src/interruptions.c between versions 1.184 and 1.185

version 1.184, 2016/07/22 15:08:43 version 1.185, 2016/08/26 08:57:56
Line 65  thread_surveillance_signaux(void *argume Line 65  thread_surveillance_signaux(void *argume
 {  {
     // Cette fonction est lancée dans un thread créé par processus pour      // Cette fonction est lancée dans un thread créé par processus pour
     // gérer le cas des appels système qui seraient bloqués lors de l'arrivée du      // gérer le cas des appels système qui seraient bloqués lors de l'arrivée du
     // signal SIGALRM. Les processus externes n'envoient plus un signal au      // signal SIGUSR2. Les processus externes n'envoient plus un signal au
     // processus ou au thread à signaler mais positionnent les informations      // processus ou au thread à signaler mais positionnent les informations
     // nécessaires dans la queue des signaux et incrémentent le sémaphore.      // nécessaires dans la queue des signaux et incrémentent le sémaphore.
     // Le sémaphore est décrémenté lorsque le signal est effectivement traité.      // Le sémaphore est décrémenté lorsque le signal est effectivement traité.
Line 135  thread_surveillance_signaux(void *argume Line 135  thread_surveillance_signaux(void *argume
                 // appels système lents.                  // appels système lents.
   
                 nombre_signaux_envoyes++;                  nombre_signaux_envoyes++;
                 kill(getpid(), SIGALRM);                  kill(getpid(), SIGUSR2);
                 sched_yield();                  sched_yield();
             }              }
   
Line 168  thread_surveillance_signaux(void *argume Line 168  thread_surveillance_signaux(void *argume
                     {                      {
                         nombre_signaux_envoyes++;                          nombre_signaux_envoyes++;
                         pthread_kill((*((struct_thread *)                          pthread_kill((*((struct_thread *)
                                 (*l_element_courant).donnee)).tid, SIGALRM);                                  (*l_element_courant).donnee)).tid, SIGUSR2);
                         sched_yield();                          sched_yield();
                     }                      }
   
Line 1629  thread_signaux(void *argument) Line 1629  thread_signaux(void *argument)
         if (signal != (0xFF & rpl_sigmax))          if (signal != (0xFF & rpl_sigmax))
         {          {
             envoi_signal_processus(getpid(), signal, d_faux);              envoi_signal_processus(getpid(), signal, d_faux);
             // Un signal SIGALRM est envoyé par le thread de surveillance              // Un signal SIGUSR2 est envoyé par le thread de surveillance
             // des signaux jusqu'à ce que les signaux soient tous traités.              // des signaux jusqu'à ce que les signaux soient tous traités.
         }          }
     } while(signal != (0xFF & rpl_sigmax));      } while(signal != (0xFF & rpl_sigmax));
Line 1685  interruption1(int signal) Line 1685  interruption1(int signal)
             break;              break;
   
         default:          default:
             // SIGALRM              // SIGUSR2
             break;              break;
     }      }
   
Line 3205  creation_queue_signaux(struct_processus Line 3205  creation_queue_signaux(struct_processus
   
     unsigned char                   *nom;      unsigned char                   *nom;
   
       if (lancement_thread_signaux(s_etat_processus) == d_erreur)
       {
           (*s_etat_processus).erreur_systeme = d_es_processus;
           return;
       }
   
     racine_segment = (*s_etat_processus).chemin_fichiers_temporaires;      racine_segment = (*s_etat_processus).chemin_fichiers_temporaires;
   
 #   ifndef IPCS_SYSV // POSIX  #   ifndef IPCS_SYSV // POSIX
Line 3449  creation_queue_signaux(struct_processus Line 3455  creation_queue_signaux(struct_processus
     }      }
 #           endif  #           endif
   
     if (lancement_thread_signaux(s_etat_processus) == d_erreur)  
     {  
         (*s_etat_processus).erreur_systeme = d_es_processus;  
         return;  
     }  
   
     return;      return;
 }  }
   
Line 3522  destruction_queue_signaux(struct_process Line 3522  destruction_queue_signaux(struct_process
         unsigned char       *nom;          unsigned char       *nom;
 #   endif  #   endif
   
     // On dépile les interruptions pour arrêter les SIGALRM sur      // On dépile les interruptions pour arrêter les SIGUSR2 sur
     // le processus courant.      // le processus courant.
   
     scrutation_interruptions(s_etat_processus);      scrutation_interruptions(s_etat_processus);
Line 3558  destruction_queue_signaux(struct_process Line 3558  destruction_queue_signaux(struct_process
         return;          return;
     }      }
   
     arret_thread_signaux(s_etat_processus);  
   
 #   ifdef IPCS_SYSV // SystemV  #   ifdef IPCS_SYSV // SystemV
 #       ifndef OS2  #       ifndef OS2
             // Il faut commencer par éliminer le sémaphore.              // Il faut commencer par éliminer le sémaphore.
Line 3658  destruction_queue_signaux(struct_process Line 3656  destruction_queue_signaux(struct_process
         sys_free(nom);          sys_free(nom);
 #   endif  #   endif
   
       arret_thread_signaux(s_etat_processus);
     return;      return;
 }  }
   

Removed from v.1.184  
changed lines
  Added in v.1.185


CVSweb interface <joel.bertrand@systella.fr>