Diff for /rpl/src/gestion_threads.c between versions 1.78 and 1.81

version 1.78, 2013/04/01 15:29:34 version 1.81, 2013/05/23 12:45:08
Line 42  lancement_thread(void *argument) Line 42  lancement_thread(void *argument)
   
     pid_t                               ppid;      pid_t                               ppid;
   
     pthread_t                           tid_final;  
   
     sig_atomic_t                        registre_stop;      sig_atomic_t                        registre_stop;
   
     ssize_t                             longueur_ecriture;      ssize_t                             longueur_ecriture;
Line 65  lancement_thread(void *argument) Line 63  lancement_thread(void *argument)
   
     struct timespec                     attente;      struct timespec                     attente;
   
       unsigned char                       caractere;
     unsigned char                       *message;      unsigned char                       *message;
   
     unsigned int                        erreur;      unsigned int                        erreur;
Line 90  lancement_thread(void *argument) Line 89  lancement_thread(void *argument)
   
     (*s_argument_thread).tid = pthread_self();      (*s_argument_thread).tid = pthread_self();
     insertion_thread(s_etat_processus, d_faux);      insertion_thread(s_etat_processus, d_faux);
   
       if (pthread_mutex_lock(&((*s_argument_thread).mutex)) != 0)
       {
           (*s_etat_processus).erreur_systeme = d_es_processus;
           return(NULL);
       }
   
     (*s_argument_thread).thread_actif = d_vrai;      (*s_argument_thread).thread_actif = d_vrai;
   
       if (pthread_mutex_unlock(&((*s_argument_thread).mutex)) != 0)
       {
           (*s_etat_processus).erreur_systeme = d_es_processus;
           return(NULL);
       }
   
     // Envoi d'une donnée pour signaler le démarrage du thread au thread      // Envoi d'une donnée pour signaler le démarrage du thread au thread
     // de surveillance.      // de surveillance.
   
       caractere = 0;
   
     if (write_atomic(s_etat_processus,      if (write_atomic(s_etat_processus,
             (*s_argument_thread).pipe_nombre_objets_attente[1],              (*s_argument_thread).pipe_nombre_elements_attente[1],
             "-", sizeof(unsigned char)) != sizeof(unsigned char))              &caractere, sizeof(caractere)) != sizeof(caractere))
     {      {
         (*s_etat_processus).erreur_systeme = d_es_processus;          (*s_etat_processus).erreur_systeme = d_es_processus;
   
Line 106  lancement_thread(void *argument) Line 120  lancement_thread(void *argument)
   
         (*s_argument_thread).thread_actif = d_faux;          (*s_argument_thread).thread_actif = d_faux;
   
         tid_final = (pthread_t) -2;  
   
         while((longueur_ecriture = write_atomic(s_etat_processus,          while((longueur_ecriture = write_atomic(s_etat_processus,
                 (*s_argument_thread).pipe_nombre_interruptions_attente[1],                  (*s_argument_thread).pipe_nombre_elements_attente[1],
                 &tid_final, sizeof(tid_final))) != sizeof(tid_final))                  &caractere, sizeof(caractere))) != sizeof(caractere))
         {  
             if (longueur_ecriture == -1)  
             {  
                 break;  
             }  
         }  
   
         while((longueur_ecriture = write_atomic(s_etat_processus,  
                 (*s_argument_thread).pipe_nombre_objets_attente[1],  
                 &tid_final, sizeof(tid_final))) != sizeof(tid_final))  
         {          {
             if (longueur_ecriture == -1)              if (longueur_ecriture == -1)
             {              {
Line 230  lancement_thread(void *argument) Line 232  lancement_thread(void *argument)
         pthread_cancel((*s_etat_processus).thread_fusible);          pthread_cancel((*s_etat_processus).thread_fusible);
     }      }
   
     tid_final = (pthread_t) -2;      caractere = 0;
   
     while((longueur_ecriture = write_atomic(s_etat_processus,  
             (*s_argument_thread).pipe_nombre_interruptions_attente[1],  
             &tid_final, sizeof(tid_final))) != sizeof(tid_final))  
     {  
         if (longueur_ecriture == -1)  
         {  
             break;  
         }  
     }  
   
     while((longueur_ecriture = write_atomic(s_etat_processus,      while((longueur_ecriture = write_atomic(s_etat_processus,
             (*s_argument_thread).pipe_nombre_objets_attente[1],              (*s_argument_thread).pipe_nombre_elements_attente[1],
             &tid_final, sizeof(tid_final))) != sizeof(tid_final))              &caractere, sizeof(caractere))) != sizeof(caractere))
     {      {
         if (longueur_ecriture == -1)          if (longueur_ecriture == -1)
         {          {
Line 273  lancement_thread(void *argument) Line 265  lancement_thread(void *argument)
     {      {
         while((longueur_ecriture = write_atomic(s_etat_processus,          while((longueur_ecriture = write_atomic(s_etat_processus,
                 (*s_argument_thread).pipe_erreurs[1],                  (*s_argument_thread).pipe_erreurs[1],
                 &((*s_etat_processus).erreur_execution),                  (int *) &((*s_etat_processus).erreur_execution),
                 sizeof((*s_etat_processus).erreur_execution))) !=                  sizeof((*s_etat_processus).erreur_execution))) !=
                 sizeof((*s_etat_processus).erreur_execution))                  sizeof((*s_etat_processus).erreur_execution))
         {          {
Line 305  lancement_thread(void *argument) Line 297  lancement_thread(void *argument)
     {      {
         while((longueur_ecriture = write_atomic(s_etat_processus,          while((longueur_ecriture = write_atomic(s_etat_processus,
                 (*s_argument_thread).pipe_erreurs[1],                  (*s_argument_thread).pipe_erreurs[1],
                 &((*s_etat_processus).erreur_systeme),                  (int *) &((*s_etat_processus).erreur_systeme),
                 sizeof((*s_etat_processus).erreur_systeme))) !=                  sizeof((*s_etat_processus).erreur_systeme))) !=
                 sizeof((*s_etat_processus).erreur_systeme))                  sizeof((*s_etat_processus).erreur_systeme))
         {          {
Line 347  lancement_thread(void *argument) Line 339  lancement_thread(void *argument)
   
     close((*s_argument_thread).pipe_erreurs[1]);      close((*s_argument_thread).pipe_erreurs[1]);
     close((*s_argument_thread).pipe_interruptions[1]);      close((*s_argument_thread).pipe_interruptions[1]);
     close((*s_argument_thread).pipe_nombre_interruptions_attente[1]);      close((*s_argument_thread).pipe_nombre_elements_attente[1]);
     close((*s_argument_thread).pipe_objets[1]);      close((*s_argument_thread).pipe_objets[1]);
     close((*s_argument_thread).pipe_nombre_objets_attente[1]);  
     close((*s_argument_thread).pipe_injections[0]);      close((*s_argument_thread).pipe_injections[0]);
     close((*s_argument_thread).pipe_nombre_injections[0]);      close((*s_argument_thread).pipe_nombre_injections[0]);
     close((*s_argument_thread).pipe_acquittement[0]);      close((*s_argument_thread).pipe_acquittement[0]);
Line 673  lancement_thread(void *argument) Line 664  lancement_thread(void *argument)
             }              }
         }          }
   
         pthread_mutex_unlock(&((*s_etat_processus).mutex));  
   
         if ((*s_etat_processus).nombre_interruptions_non_affectees != 0)          if ((*s_etat_processus).nombre_interruptions_non_affectees != 0)
         {          {
             affectation_interruptions_logicielles(s_etat_processus);              affectation_interruptions_logicielles(s_etat_processus);
         }          }
   
           pthread_mutex_unlock(&((*s_etat_processus).mutex));
         nanosleep(&attente, NULL);          nanosleep(&attente, NULL);
         pthread_mutex_lock(&((*s_etat_processus).mutex));          pthread_mutex_lock(&((*s_etat_processus).mutex));
     }      }
Line 1020  lancement_thread(void *argument) Line 1010  lancement_thread(void *argument)
     free(s_etat_processus);      free(s_etat_processus);
   
     pthread_mutex_lock(&((*s_argument_thread).mutex));      pthread_mutex_lock(&((*s_argument_thread).mutex));
       (*s_argument_thread).thread_actif = d_faux;
     pthread_mutex_unlock(&((*s_argument_thread).mutex));      pthread_mutex_unlock(&((*s_argument_thread).mutex));
   
     (*s_argument_thread).thread_actif = d_faux;  
     pthread_exit(NULL);      pthread_exit(NULL);
     return(NULL);      return(NULL);
 }  }

Removed from v.1.78  
changed lines
  Added in v.1.81


CVSweb interface <joel.bertrand@systella.fr>