--- rpl/src/gestion_interruptions.c 2019/01/01 09:02:52 1.66 +++ rpl/src/gestion_interruptions.c 2019/02/02 10:13:50 1.67 @@ -39,6 +39,7 @@ void affectation_interruptions_logicielles(struct_processus *s_etat_processus) { int interruption; + int ios; sig_atomic_t registre; @@ -57,6 +58,17 @@ affectation_interruptions_logicielles(st return; } + if ((ios = pthread_mutex_trylock(&((*s_etat_processus) + .mutex_pile_processus))) != 0) + { + if (ios != EBUSY) + { + (*s_etat_processus).erreur_systeme = d_es_processus; + } + + return; + } + l_element_courant = (*s_etat_processus).l_base_pile_processus; while(l_element_courant != NULL) @@ -71,6 +83,8 @@ affectation_interruptions_logicielles(st if ((*(*l_element_courant).donnee).type != PRC) { + pthread_mutex_unlock(&((*s_etat_processus).mutex_pile_processus)); + (*s_etat_processus).erreur_systeme = d_es_processus; return; } @@ -78,6 +92,8 @@ affectation_interruptions_logicielles(st if (pthread_mutex_lock(&((*(*((struct_processus_fils *) (*(*l_element_courant).donnee).objet)).thread).mutex)) != 0) { + pthread_mutex_unlock(&((*s_etat_processus).mutex_pile_processus)); + (*s_etat_processus).erreur_systeme = d_es_processus; return; } @@ -111,6 +127,8 @@ affectation_interruptions_logicielles(st pthread_mutex_unlock(&((*(*((struct_processus_fils *) (*(*l_element_courant).donnee).objet)).thread) .mutex)); + pthread_mutex_unlock(&((*s_etat_processus) + .mutex_pile_processus)); (*s_etat_processus).erreur_systeme = d_es_interruption_invalide; @@ -131,6 +149,8 @@ affectation_interruptions_logicielles(st pthread_mutex_unlock(&((*(*((struct_processus_fils *) (*(*l_element_courant).donnee).objet)).thread) .mutex)); + pthread_mutex_unlock(&((*s_etat_processus) + .mutex_pile_processus)); (*s_etat_processus).erreur_systeme = d_es_allocation_memoire; @@ -146,6 +166,14 @@ affectation_interruptions_logicielles(st pthread_mutex_unlock(&((*(*((struct_processus_fils *) (*(*l_element_courant).donnee).objet)).thread) .mutex)); + + if (pthread_mutex_unlock(&((*s_etat_processus) + .mutex_pile_processus)) != 0) + { + (*s_etat_processus).erreur_systeme = d_es_processus; + return; + } + return; } @@ -235,6 +263,8 @@ affectation_interruptions_logicielles(st { pthread_mutex_unlock(&((*(*((struct_processus_fils *) (*(*l_element_courant).donnee).objet)).thread).mutex)); + pthread_mutex_unlock(&((*s_etat_processus) + .mutex_pile_processus)); if (registre == 0) { @@ -263,6 +293,12 @@ affectation_interruptions_logicielles(st l_element_courant = (*l_element_courant).suivant; } + if (pthread_mutex_unlock(&((*s_etat_processus).mutex_pile_processus)) != 0) + { + (*s_etat_processus).erreur_systeme = d_es_processus; + return; + } + return; }