--- rpl/src/gestion_threads.c 2011/09/20 15:45:53 1.54 +++ rpl/src/gestion_threads.c 2011/09/20 16:57:50 1.55 @@ -73,6 +73,18 @@ lancement_thread(void *argument) s_argument_thread = (struct_descripteur_thread *) argument; s_etat_processus = (*s_argument_thread).s_nouvel_etat_processus; + +# ifndef SEMAPHORES_NOMMES + sem_init(&((*s_etat_processus).semaphore_fork), 0, 0); +# else + if (((*s_etat_processus).semaphore_fork = sem_init3(0, getpid(), + pthread_self(), SEM_FORK)) == SEM_FAILED) + { + (*s_etat_processus).erreur_systeme = d_es_allocation_memoire; + return(NULL); + } +# endif + (*s_argument_thread).tid = pthread_self(); (*s_argument_thread).thread_actif = d_vrai; @@ -987,7 +999,8 @@ lancement_thread(void *argument) # ifndef SEMAPHORES_NOMMES sem_destroy(&((*s_etat_processus).semaphore_fork)); # else - sem_destroy2((*s_etat_processus).semaphore_fork, getpid(), SEM_FORK); + sem_destroy3((*s_etat_processus).semaphore_fork, getpid(), + pthread_self(), SEM_FORK); # endif liberation_contexte_cas(s_etat_processus);