--- rpl/src/gestion_processus.c 2013/05/21 12:10:11 1.66 +++ rpl/src/gestion_processus.c 2013/05/30 09:41:41 1.68 @@ -77,7 +77,7 @@ surveillance_processus(void *argument) s_argument_thread = argument; s_etat_processus = (*s_argument_thread).s_etat_processus; - 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; BUG(1, uprintf("General mutex error!\n")); @@ -85,7 +85,7 @@ surveillance_processus(void *argument) insertion_thread_surveillance(s_etat_processus, s_argument_thread); - 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; BUG(1, uprintf("General mutex error!\n")); @@ -176,7 +176,8 @@ surveillance_processus(void *argument) // Un objet supplémentaire est dans le pipe correspondant // au processus surveillé par ce thread. - 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_processus_fils = d_es_processus; @@ -274,8 +275,23 @@ surveillance_processus(void *argument) (*(*((struct_processus_fils *) (*(*l_element_courant).donnee).objet)) .thread).nombre_interruptions_dans_pipe++; + + if (pthread_mutex_lock(&((*s_etat_processus) + .mutex_interruptions)) != 0) + { + (*s_etat_processus).erreur_systeme = + d_es_processus; + } + (*s_etat_processus) .nombre_interruptions_non_affectees++; + + if (pthread_mutex_unlock(&((*s_etat_processus) + .mutex_interruptions)) != 0) + { + (*s_etat_processus).erreur_systeme = + d_es_processus; + } } if (pthread_mutex_unlock( @@ -364,8 +380,8 @@ surveillance_processus(void *argument) } } - 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_processus_fils = d_es_processus; @@ -415,7 +431,8 @@ surveillance_processus(void *argument) // Un objet supplémentaire est dans le pipe correspondant // au processus surveillé par ce thread. - 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_processus_fils = d_es_processus; @@ -430,8 +447,7 @@ surveillance_processus(void *argument) (*(*l_element_courant).donnee).objet)) .thread).processus_detache == d_vrai) { - l_element_courant = (*l_element_courant) - .suivant; + l_element_courant = (*l_element_courant).suivant; continue; } @@ -516,8 +532,23 @@ surveillance_processus(void *argument) (*(*((struct_processus_fils *) (*(*l_element_courant).donnee).objet)) .thread).nombre_interruptions_dans_pipe++; + + if (pthread_mutex_lock(&((*s_etat_processus) + .mutex_interruptions)) != 0) + { + (*s_etat_processus).erreur_systeme = + d_es_processus; + } + (*s_etat_processus) .nombre_interruptions_non_affectees++; + + if (pthread_mutex_unlock(&((*s_etat_processus) + .mutex_interruptions)) != 0) + { + (*s_etat_processus).erreur_systeme = + d_es_processus; + } } if (pthread_mutex_unlock( @@ -592,8 +623,23 @@ surveillance_processus(void *argument) } } + if (pthread_mutex_unlock(&((*s_etat_processus) + .mutex_pile_processus)) != 0) + { + (*s_etat_processus).erreur_systeme_processus_fils = + d_es_processus; + } + envoi_signal_thread((*s_argument_thread).thread_pere, rpl_siginject); + + if (pthread_mutex_lock(&((*s_etat_processus) + .mutex_pile_processus)) != 0) + { + (*s_etat_processus).erreur_systeme_processus_fils = + d_es_processus; + } + break; } @@ -610,8 +656,8 @@ surveillance_processus(void *argument) } } - 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_processus_fils = d_es_processus; @@ -654,7 +700,7 @@ surveillance_processus(void *argument) * reste plus rien dans les tuyaux... */ - 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_processus_fils = d_es_processus; @@ -790,8 +836,23 @@ surveillance_processus(void *argument) (*(*l_element_courant).donnee).objet)) .thread) .nombre_interruptions_dans_pipe++; + + if (pthread_mutex_lock(&((*s_etat_processus) + .mutex_interruptions)) != 0) + { + (*s_etat_processus).erreur_systeme = + d_es_processus; + } + (*s_etat_processus) .nombre_interruptions_non_affectees++; + + if (pthread_mutex_unlock(&((*s_etat_processus) + .mutex_interruptions)) != 0) + { + (*s_etat_processus).erreur_systeme = + d_es_processus; + } } if (pthread_mutex_unlock( @@ -893,8 +954,23 @@ surveillance_processus(void *argument) (*(*l_element_courant).donnee).objet)) .thread) .nombre_interruptions_dans_pipe++; + + if (pthread_mutex_lock(&((*s_etat_processus) + .mutex_interruptions)) != 0) + { + (*s_etat_processus).erreur_systeme = + d_es_processus; + } + (*s_etat_processus) .nombre_interruptions_non_affectees++; + + if (pthread_mutex_unlock(&((*s_etat_processus) + .mutex_interruptions)) != 0) + { + (*s_etat_processus).erreur_systeme = + d_es_processus; + } } if (pthread_mutex_unlock( @@ -915,7 +991,8 @@ surveillance_processus(void *argument) } } - 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_processus_fils = d_es_processus; @@ -1009,7 +1086,7 @@ surveillance_processus(void *argument) (*s_etat_processus).erreur_systeme_processus_fils = d_es_processus; } - 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_processus_fils = d_es_processus; } @@ -1220,7 +1297,8 @@ surveillance_processus(void *argument) } else { - 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_processus_fils = d_es_processus; @@ -1230,7 +1308,8 @@ surveillance_processus(void *argument) 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_processus_fils = d_es_processus; @@ -1349,7 +1428,8 @@ surveillance_processus(void *argument) retrait_thread_surveillance(s_etat_processus, s_argument_thread); - 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_processus_fils = d_es_processus; }