--- rpl/src/gestion_threads.c 2011/09/14 14:34:28 1.50 +++ rpl/src/gestion_threads.c 2011/09/20 15:45:53 1.54 @@ -73,86 +73,9 @@ lancement_thread(void *argument) s_argument_thread = (struct_descripteur_thread *) argument; 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).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); // Envoi d'une donnée pour signaler le démarrage du thread au thread @@ -162,7 +85,6 @@ lancement_thread(void *argument) (*s_argument_thread).pipe_nombre_objets_attente[1], "-", sizeof(unsigned char)) != sizeof(unsigned char)) { - pthread_mutex_unlock(&((*s_etat_processus).mutex)); (*s_etat_processus).erreur_systeme = d_es_processus; pthread_mutex_lock(&((*s_argument_thread).mutex)); @@ -1062,7 +984,11 @@ lancement_thread(void *argument) pthread_mutex_destroy(&((*s_etat_processus).mutex)); 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(), SEM_FORK); +# endif liberation_contexte_cas(s_etat_processus); free((*s_etat_processus).localisation);