Diff for /rpl/src/gestion_threads.c between versions 1.50 and 1.53

version 1.50, 2011/09/14 14:34:28 version 1.53, 2011/09/20 14:36:29
Line 73  lancement_thread(void *argument) Line 73  lancement_thread(void *argument)
   
     s_argument_thread = (struct_descripteur_thread *) argument;      s_argument_thread = (struct_descripteur_thread *) argument;
     s_etat_processus = (*s_argument_thread).s_nouvel_etat_processus;      s_etat_processus = (*s_argument_thread).s_nouvel_etat_processus;
     (*s_etat_processus).tid_courant = pthread_self();  
     (*s_argument_thread).tid = pthread_self();      (*s_argument_thread).tid = pthread_self();
     (*s_argument_thread).thread_actif = d_vrai;      (*s_argument_thread).thread_actif = d_vrai;
   
 #   ifndef SEMAPHORES_NOMMES  
     if (pthread_setspecific(semaphore_fork_processus_courant,  
             &((*s_etat_processus).semaphore_fork)) != 0)  
 #   else  
     if (pthread_setspecific(semaphore_fork_processus_courant,  
             (*s_etat_processus).semaphore_fork) != 0)  
 #   endif  
     {  
         (*s_etat_processus).erreur_systeme = d_es_processus;  
   
         pthread_mutex_unlock(&((*s_etat_processus).mutex));  
   
         pthread_mutex_lock(&((*s_argument_thread).mutex));  
         pthread_mutex_unlock(&((*s_argument_thread).mutex));  
   
         (*s_argument_thread).thread_actif = d_faux;  
   
         tid_final = -2;  
   
         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,  
                 (*s_argument_thread).pipe_nombre_objets_attente[1],  
                 &tid_final, sizeof(tid_final))) != sizeof(tid_final))  
         {  
             if (longueur_ecriture == -1)  
             {  
                 break;  
             }  
         }  
   
         pthread_exit(NULL);  
     }  
   
     if (pthread_mutex_unlock(&((*s_etat_processus).mutex)) != 0)  
     {  
         (*s_etat_processus).erreur_systeme = d_es_processus;  
   
         pthread_mutex_lock(&((*s_argument_thread).mutex));  
         pthread_mutex_unlock(&((*s_argument_thread).mutex));  
   
         (*s_argument_thread).thread_actif = d_faux;  
   
         tid_final = -2;  
   
         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,  
                 (*s_argument_thread).pipe_nombre_objets_attente[1],  
                 &tid_final, sizeof(tid_final))) != sizeof(tid_final))  
         {  
             if (longueur_ecriture == -1)  
             {  
                 break;  
             }  
         }  
   
         pthread_exit(NULL);  
     }  
   
     insertion_thread(s_etat_processus, d_faux);      insertion_thread(s_etat_processus, d_faux);
   
     // 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
Line 162  lancement_thread(void *argument) Line 85  lancement_thread(void *argument)
             (*s_argument_thread).pipe_nombre_objets_attente[1],              (*s_argument_thread).pipe_nombre_objets_attente[1],
             "-", sizeof(unsigned char)) != sizeof(unsigned char))              "-", sizeof(unsigned char)) != sizeof(unsigned char))
     {      {
         pthread_mutex_unlock(&((*s_etat_processus).mutex));  
         (*s_etat_processus).erreur_systeme = d_es_processus;          (*s_etat_processus).erreur_systeme = d_es_processus;
   
         pthread_mutex_lock(&((*s_argument_thread).mutex));          pthread_mutex_lock(&((*s_argument_thread).mutex));
Line 1062  lancement_thread(void *argument) Line 984  lancement_thread(void *argument)
     pthread_mutex_destroy(&((*s_etat_processus).mutex));      pthread_mutex_destroy(&((*s_etat_processus).mutex));
     pthread_mutex_destroy(&((*s_etat_processus).mutex_allocation));      pthread_mutex_destroy(&((*s_etat_processus).mutex_allocation));
   
     sem_destroy(&((*s_etat_processus).semaphore_fork));  #   ifndef SEMAPHORES_NOMMES
           sem_destroy(&((*s_etat_processus).semaphore_fork));
   #   else
           sem_destroy2((*s_etat_processus).semaphore_fork, getpid());
   #   endif
   
     liberation_contexte_cas(s_etat_processus);      liberation_contexte_cas(s_etat_processus);
     free((*s_etat_processus).localisation);      free((*s_etat_processus).localisation);

Removed from v.1.50  
changed lines
  Added in v.1.53


CVSweb interface <joel.bertrand@systella.fr>