Diff for /rpl/src/interruptions.c between versions 1.128 and 1.129

version 1.128, 2013/05/22 12:05:42 version 1.129, 2013/05/22 13:40:12
Line 151  thread_surveillance_signaux(void *argume Line 151  thread_surveillance_signaux(void *argume
             // 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.
   
               // Attention : l'ordre de verrouillage des mutexes est important
               // pour éviter les conditions bloquantes !
   
               pthread_mutex_lock(&mutex_interruptions);
             pthread_mutex_lock(&mutex_liste_threads);              pthread_mutex_lock(&mutex_liste_threads);
   
             l_element_courant = liste_threads;              l_element_courant = liste_threads;
   
             while(l_element_courant != NULL)              while(l_element_courant != NULL)
Line 159  thread_surveillance_signaux(void *argume Line 164  thread_surveillance_signaux(void *argume
                 if ((*((struct_thread *) (*l_element_courant).donnee)).pid                  if ((*((struct_thread *) (*l_element_courant).donnee)).pid
                         == getpid())                          == getpid())
                 {                  {
                     if (pthread_mutex_lock(&mutex_interruptions) != 0)                      if ((*(*((struct_thread *) (*l_element_courant).donnee))
                               .s_etat_processus).pointeur_signal_ecriture !=
                               (*(*((struct_thread *) (*l_element_courant)
                               .donnee)).s_etat_processus)
                               .pointeur_signal_lecture)
                     {                      {
                         (*s_etat_processus).erreur_systeme = d_es_processus;                          nombre_signaux_envoyes++;
                     }                          pthread_kill((*((struct_thread *)
                     else                                  (*l_element_courant).donnee)).tid, SIGALRM);
                     {  
                         if ((*(*((struct_thread *) (*l_element_courant).donnee))  
                                 .s_etat_processus).pointeur_signal_ecriture !=  
                                 (*(*((struct_thread *) (*l_element_courant)  
                                 .donnee)).s_etat_processus)  
                                 .pointeur_signal_lecture)  
                         {  
                             nombre_signaux_envoyes++;  
                             pthread_kill((*((struct_thread *)  
                                     (*l_element_courant).donnee)).tid, SIGALRM);  
                         }  
   
                         if (pthread_mutex_unlock(&mutex_interruptions) != 0)  
                         {  
                             (*s_etat_processus).erreur_systeme = d_es_processus;  
                         }  
                     }                      }
                 }                  }
   
Line 187  thread_surveillance_signaux(void *argume Line 180  thread_surveillance_signaux(void *argume
             }              }
   
             pthread_mutex_unlock(&mutex_liste_threads);              pthread_mutex_unlock(&mutex_liste_threads);
               pthread_mutex_unlock(&mutex_interruptions);
   
             // Nanosleep              // Nanosleep
   
Line 2967  envoi_signal_thread(pthread_t tid, enum Line 2961  envoi_signal_thread(pthread_t tid, enum
   
     struct_processus                        *s_etat_processus;      struct_processus                        *s_etat_processus;
   
     if (pthread_mutex_lock(&mutex_interruptions) != 0)  
     {  
         pthread_mutex_unlock(&mutex_liste_threads);  
         return(1);  
     }  
   
     if (pthread_mutex_lock(&mutex_liste_threads) != 0)      if (pthread_mutex_lock(&mutex_liste_threads) != 0)
     {      {
         return(1);          return(1);
Line 3001  envoi_signal_thread(pthread_t tid, enum Line 2989  envoi_signal_thread(pthread_t tid, enum
     s_etat_processus = (*((struct_thread *) (*l_element_courant).donnee))      s_etat_processus = (*((struct_thread *) (*l_element_courant).donnee))
             .s_etat_processus;              .s_etat_processus;
   
       if (pthread_mutex_lock(&mutex_interruptions) != 0)
       {
           pthread_mutex_unlock(&mutex_liste_threads);
           return(1);
       }
   
     (*s_etat_processus).signaux_en_queue      (*s_etat_processus).signaux_en_queue
             [(*s_etat_processus).pointeur_signal_ecriture] = signal;              [(*s_etat_processus).pointeur_signal_ecriture] = signal;
     (*s_etat_processus).pointeur_signal_ecriture =      (*s_etat_processus).pointeur_signal_ecriture =

Removed from v.1.128  
changed lines
  Added in v.1.129


CVSweb interface <joel.bertrand@systella.fr>