--- rpl/src/instructions_s10.c 2013/05/22 13:40:12 1.76 +++ rpl/src/instructions_s10.c 2015/01/08 14:30:58 1.88 @@ -1,7 +1,7 @@ /* ================================================================================ - RPL/2 (R) version 4.1.14 - Copyright (C) 1989-2013 Dr. BERTRAND Joël + RPL/2 (R) version 4.1.20 + Copyright (C) 1989-2015 Dr. BERTRAND Joël This file is part of RPL/2. @@ -489,9 +489,8 @@ instruction_spawn(struct_processus *s_et return; } - if (pthread_mutex_lock(&((*s_etat_processus).mutex)) != 0) + if (pthread_mutex_lock(&((*s_etat_processus).mutex_pile_processus)) != 0) { - pthread_mutex_unlock(&((*s_nouvel_etat_processus).mutex)); (*s_etat_processus).erreur_systeme = d_es_processus; return; } @@ -520,29 +519,49 @@ instruction_spawn(struct_processus *s_et (*(*l_element_courant).donnee).objet)).thread) .tid, (*s_argument_thread).tid) != 0) { - if (pthread_mutex_unlock(&((*s_etat_processus).mutex)) != 0) + scrutation_injection(s_etat_processus); + + if (pthread_mutex_lock(&((*s_etat_processus) + .mutex_interruptions)) != 0) { + pthread_mutex_unlock(&((*s_etat_processus) + .mutex_pile_processus)); (*s_etat_processus).erreur_systeme = d_es_processus; return; } - scrutation_injection(s_etat_processus); - 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_pile_processus)); + (*s_etat_processus).erreur_systeme = d_es_processus; + return; + } + if ((*s_etat_processus).nombre_interruptions_en_queue != 0) { traitement_interruptions_logicielles(s_etat_processus); } + if (pthread_mutex_unlock(&((*s_etat_processus) + .mutex_pile_processus)) != 0) + { + (*s_etat_processus).erreur_systeme = d_es_processus; + return; + } + nanosleep(&attente, NULL); INCR_GRANULARITE(attente.tv_nsec); - if (pthread_mutex_lock(&((*s_etat_processus).mutex)) != 0) + if (pthread_mutex_lock(&((*s_etat_processus) + .mutex_pile_processus)) != 0) { (*s_etat_processus).erreur_systeme = d_es_processus; return; @@ -562,11 +581,11 @@ instruction_spawn(struct_processus *s_et (struct_liste_chainee **) &((*s_etat_processus) .l_base_pile_processus), s_objet_systeme) == d_erreur) { - pthread_mutex_unlock(&((*s_etat_processus).mutex)); + pthread_mutex_unlock(&((*s_etat_processus).mutex_pile_processus)); return; } - if (pthread_mutex_unlock(&((*s_etat_processus).mutex)) != 0) + if (pthread_mutex_unlock(&((*s_etat_processus).mutex_pile_processus)) != 0) { (*s_etat_processus).erreur_systeme = d_es_processus; return;