--- rpl/src/gestion_threads.c 2010/04/28 11:05:45 1.14 +++ rpl/src/gestion_threads.c 2010/06/19 15:54:51 1.21 @@ -1,6 +1,6 @@ /* ================================================================================ - RPL/2 (R) version 4.0.15 + RPL/2 (R) version 4.0.16 Copyright (C) 1989-2010 Dr. BERTRAND Joël This file is part of RPL/2. @@ -74,9 +74,9 @@ lancement_thread(void *argument) attente.tv_nsec = GRANULARITE_us * 1000; s_argument_thread = (struct_descripteur_thread *) argument; + s_etat_processus = (*s_argument_thread).s_nouvel_etat_processus; (*s_argument_thread).tid = pthread_self(); (*s_argument_thread).thread_actif = d_vrai; - s_etat_processus = (*s_argument_thread).s_nouvel_etat_processus; # ifndef SEMAPHORES_NOMMES if (pthread_setspecific(semaphore_fork_processus_courant, @@ -642,11 +642,6 @@ lancement_thread(void *argument) l_element_courant = (struct_liste_chainee *) (*s_etat_processus).l_base_pile_processus; - if ((*s_etat_processus).nombre_interruptions_non_affectees != 0) - { - affectation_interruptions_logicielles(s_etat_processus); - } - registre_stop = (*s_etat_processus) .var_volatile_traitement_retarde_stop; (*s_etat_processus).var_volatile_traitement_retarde_stop = 1; @@ -739,6 +734,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); + } + nanosleep(&attente, NULL); pthread_mutex_lock(&((*s_etat_processus).mutex)); } @@ -1076,6 +1077,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)); free((*s_etat_processus).localisation); free(s_etat_processus);