--- rpl/src/gestion_threads.c 2013/05/21 12:10:12 1.79 +++ rpl/src/gestion_threads.c 2013/05/23 12:45:08 1.81 @@ -89,8 +89,21 @@ lancement_thread(void *argument) (*s_argument_thread).tid = pthread_self(); 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; + 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 // de surveillance. @@ -651,13 +664,12 @@ lancement_thread(void *argument) } } - pthread_mutex_unlock(&((*s_etat_processus).mutex)); - if ((*s_etat_processus).nombre_interruptions_non_affectees != 0) { affectation_interruptions_logicielles(s_etat_processus); } + pthread_mutex_unlock(&((*s_etat_processus).mutex)); nanosleep(&attente, NULL); pthread_mutex_lock(&((*s_etat_processus).mutex)); } @@ -998,9 +1010,9 @@ lancement_thread(void *argument) free(s_etat_processus); pthread_mutex_lock(&((*s_argument_thread).mutex)); + (*s_argument_thread).thread_actif = d_faux; pthread_mutex_unlock(&((*s_argument_thread).mutex)); - (*s_argument_thread).thread_actif = d_faux; pthread_exit(NULL); return(NULL); }