--- rpl/src/gestion_threads.c 2013/05/22 09:05:20 1.80 +++ rpl/src/gestion_threads.c 2013/05/28 22:09:55 1.82 @@ -664,13 +664,29 @@ lancement_thread(void *argument) } } - pthread_mutex_unlock(&((*s_etat_processus).mutex)); + if (pthread_mutex_lock(&((*s_etat_processus).mutex_interruptions)) != 0) + { + pthread_mutex_unlock(&((*s_etat_processus).mutex)); + + (*s_etat_processus).erreur_systeme = d_es_processus; + exit(EXIT_FAILURE); + } if ((*s_etat_processus).nombre_interruptions_non_affectees != 0) { affectation_interruptions_logicielles(s_etat_processus); } + if (pthread_mutex_unlock(&((*s_etat_processus).mutex_interruptions)) + != 0) + { + pthread_mutex_unlock(&((*s_etat_processus).mutex)); + + (*s_etat_processus).erreur_systeme = d_es_processus; + exit(EXIT_FAILURE); + } + + pthread_mutex_unlock(&((*s_etat_processus).mutex)); nanosleep(&attente, NULL); pthread_mutex_lock(&((*s_etat_processus).mutex)); } @@ -998,6 +1014,7 @@ lancement_thread(void *argument) retrait_thread(s_etat_processus); pthread_mutex_destroy(&((*s_etat_processus).mutex)); pthread_mutex_destroy(&((*s_etat_processus).mutex_allocation)); + pthread_mutex_destroy(&((*s_etat_processus).mutex_interruptions)); # ifndef SEMAPHORES_NOMMES sem_destroy(&((*s_etat_processus).semaphore_fork)); @@ -1011,9 +1028,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); }