--- rpl/src/gestion_processus.c 2010/06/09 12:19:13 1.16 +++ rpl/src/gestion_processus.c 2010/06/17 11:00:23 1.17 @@ -53,6 +53,7 @@ surveillance_processus(void *argument) pid_t pid; pid_t pid_candidat; + pid_t pid_erreur; pthread_t tid_candidat; @@ -71,7 +72,8 @@ surveillance_processus(void *argument) unsigned char caractere; - unsigned int tampon_erreur; + unsigned int tampon_erreur_execution; + unsigned int tampon_erreur_systeme; sigemptyset(&masque); sigaddset(&masque, SIGINJECT); @@ -100,7 +102,6 @@ surveillance_processus(void *argument) BUG(1, uprintf("General mutex error!\n")); } - attente.tv_sec = 0; attente.tv_nsec = GRANULARITE_us * 1000; @@ -1443,7 +1444,7 @@ surveillance_processus(void *argument) attente.tv_nsec = GRANULARITE_us * 1000; while(read_atomic(s_etat_processus, (*s_argument_thread).pipe_erreurs[0], - &((*s_etat_processus).erreur_execution_processus_fils), + &tampon_erreur_execution, sizeof((*s_etat_processus).erreur_execution_processus_fils)) != sizeof((*s_etat_processus).erreur_execution_processus_fils)) { @@ -1455,7 +1456,7 @@ surveillance_processus(void *argument) attente.tv_nsec = GRANULARITE_us * 1000; while(read_atomic(s_etat_processus, (*s_argument_thread).pipe_erreurs[0], - &tampon_erreur, + &tampon_erreur_systeme, sizeof((*s_etat_processus).erreur_systeme_processus_fils)) != sizeof((*s_etat_processus).erreur_systeme_processus_fils)) { @@ -1463,13 +1464,11 @@ surveillance_processus(void *argument) INCR_GRANULARITE(attente.tv_nsec); } - (*s_etat_processus).erreur_systeme_processus_fils = tampon_erreur; - attente.tv_sec = 0; attente.tv_nsec = GRANULARITE_us * 1000; while(read_atomic(s_etat_processus, (*s_argument_thread).pipe_erreurs[0], - &((*s_etat_processus).pid_erreur_processus_fils), + &pid_erreur, sizeof((*s_etat_processus).pid_erreur_processus_fils)) != sizeof((*s_etat_processus).pid_erreur_processus_fils)) { @@ -1478,18 +1477,6 @@ surveillance_processus(void *argument) } /* - * Si une erreur est déclarée dans le processus fils, le message - * d'erreur a déjà été affiché. - */ - - if (((*s_etat_processus).erreur_systeme_processus_fils != d_es) || - ((*s_etat_processus).erreur_execution_processus_fils != d_ex)) - { - (*s_etat_processus).erreur_processus_fils = d_vrai; - (*s_etat_processus).invalidation_message_erreur = d_vrai; - } - - /* * Retrait du processus de la pile des processus */ @@ -1504,6 +1491,24 @@ surveillance_processus(void *argument) } else { + (*s_etat_processus).erreur_execution_processus_fils = + tampon_erreur_execution; + (*s_etat_processus).erreur_systeme_processus_fils = + tampon_erreur_systeme; + (*s_etat_processus).pid_erreur_processus_fils = pid_erreur; + + /* + * Si une erreur est déclarée dans le processus fils, le message + * d'erreur a déjà été affiché. + */ + + if (((*s_etat_processus).erreur_systeme_processus_fils != d_es) || + ((*s_etat_processus).erreur_execution_processus_fils != d_ex)) + { + (*s_etat_processus).erreur_processus_fils = d_vrai; + (*s_etat_processus).invalidation_message_erreur = d_vrai; + } + do { drapeau_fin = d_faux;