--- rpl/src/instructions_d5.c 2013/04/01 15:29:35 1.107 +++ rpl/src/instructions_d5.c 2013/05/21 12:10:12 1.108 @@ -819,7 +819,6 @@ instruction_detach(struct_processus *s_e logical1 drapeau; pid_t ppid; - pid_t pid_final; pthread_attr_t attributs; @@ -1040,7 +1039,7 @@ instruction_detach(struct_processus *s_e return; } - if (pipe((*s_argument_thread).pipe_nombre_interruptions_attente) != 0) + if (pipe((*s_argument_thread).pipe_nombre_elements_attente) != 0) { (*s_etat_processus).erreur_systeme = d_es_processus; return; @@ -1058,12 +1057,6 @@ instruction_detach(struct_processus *s_e return; } - if (pipe((*s_argument_thread).pipe_nombre_objets_attente) != 0) - { - (*s_etat_processus).erreur_systeme = d_es_processus; - return; - } - if (pipe((*s_argument_thread).pipe_injections) != 0) { (*s_etat_processus).erreur_systeme = d_es_processus; @@ -1172,7 +1165,7 @@ instruction_detach(struct_processus *s_e return; } - if (close((*s_argument_thread).pipe_nombre_interruptions_attente[1]) + if (close((*s_argument_thread).pipe_nombre_elements_attente[1]) != 0) { (*s_etat_processus).erreur_systeme = d_es_processus; @@ -1185,12 +1178,6 @@ instruction_detach(struct_processus *s_e return; } - if (close((*s_argument_thread).pipe_nombre_objets_attente[1]) != 0) - { - (*s_etat_processus).erreur_systeme = d_es_processus; - return; - } - if (close((*s_argument_thread).pipe_injections[0]) != 0) { (*s_etat_processus).erreur_systeme = d_es_processus; @@ -1317,7 +1304,7 @@ instruction_detach(struct_processus *s_e (*s_etat_processus).erreur_systeme = d_es_processus; } else if (close((*s_argument_thread) - .pipe_nombre_interruptions_attente[0]) != 0) + .pipe_nombre_elements_attente[0]) != 0) { (*s_etat_processus).erreur_systeme = d_es_processus; } @@ -1325,10 +1312,6 @@ instruction_detach(struct_processus *s_e { (*s_etat_processus).erreur_systeme = d_es_processus; } - else if (close((*s_argument_thread).pipe_nombre_objets_attente[0]) != 0) - { - (*s_etat_processus).erreur_systeme = d_es_processus; - } else if (close((*s_argument_thread).pipe_injections[1]) != 0) { (*s_etat_processus).erreur_systeme = d_es_processus; @@ -1376,28 +1359,18 @@ instruction_detach(struct_processus *s_e // Envoi d'une donnée pour signaler le démarrage du processus au thread // de surveillance. + caractere = 0; + if (write_atomic(s_etat_processus, - (*s_argument_thread).pipe_nombre_objets_attente[1], - "-", sizeof(unsigned char)) != sizeof(unsigned char)) + (*s_argument_thread).pipe_nombre_elements_attente[1], + &caractere, sizeof(caractere)) != sizeof(caractere)) { pthread_mutex_unlock(&((*s_etat_processus).mutex)); (*s_etat_processus).erreur_systeme = d_es_processus; - pid_final = -2; - while((longueur_ecriture = write_atomic(s_etat_processus, - (*s_argument_thread).pipe_nombre_interruptions_attente[1], - &pid_final, sizeof(pid_final))) != sizeof(pid_final)) - { - if (longueur_ecriture == -1) - { - break; - } - } - - while((longueur_ecriture = write_atomic(s_etat_processus, - (*s_argument_thread).pipe_nombre_objets_attente[1], - &pid_final, sizeof(pid_final))) != sizeof(pid_final)) + (*s_argument_thread).pipe_nombre_elements_attente[1], + &caractere, sizeof(caractere))) != sizeof(caractere)) { if (longueur_ecriture == -1) { @@ -1414,21 +1387,9 @@ instruction_detach(struct_processus *s_e { (*s_etat_processus).erreur_systeme = d_es_processus; - pid_final = -2; - while((longueur_ecriture = write_atomic(s_etat_processus, - (*s_argument_thread).pipe_nombre_interruptions_attente[1], - &pid_final, sizeof(pid_final))) != sizeof(pid_final)) - { - if (longueur_ecriture == -1) - { - break; - } - } - - while((longueur_ecriture = write_atomic(s_etat_processus, - (*s_argument_thread).pipe_nombre_objets_attente[1], - &pid_final, sizeof(pid_final))) != sizeof(pid_final)) + (*s_argument_thread).pipe_nombre_elements_attente[1], + &caractere, sizeof(caractere))) != sizeof(caractere)) { if (longueur_ecriture == -1) { @@ -1450,21 +1411,11 @@ instruction_detach(struct_processus *s_e { (*s_etat_processus).erreur_systeme = d_es_processus; - pid_final = -2; - - while((longueur_ecriture = write_atomic(s_etat_processus, - (*s_argument_thread).pipe_nombre_interruptions_attente[1], - &pid_final, sizeof(pid_final))) != sizeof(pid_final)) - { - if (longueur_ecriture == -1) - { - break; - } - } + caractere = 0; while((longueur_ecriture = write_atomic(s_etat_processus, - (*s_argument_thread).pipe_nombre_objets_attente[1], - &pid_final, sizeof(pid_final))) != sizeof(pid_final)) + (*s_argument_thread).pipe_nombre_elements_attente[1], + &caractere, sizeof(caractere))) != sizeof(caractere)) { if (longueur_ecriture == -1) { @@ -1484,21 +1435,11 @@ instruction_detach(struct_processus *s_e { (*s_etat_processus).erreur_systeme = d_es_processus; - pid_final = -2; + caractere = 0; while((longueur_ecriture = write_atomic(s_etat_processus, - (*s_argument_thread).pipe_nombre_interruptions_attente[1], - &pid_final, sizeof(pid_final))) != sizeof(pid_final)) - { - if (longueur_ecriture == -1) - { - break; - } - } - - while((longueur_ecriture = write_atomic(s_etat_processus, - (*s_argument_thread).pipe_nombre_objets_attente[1], - &pid_final, sizeof(pid_final))) != sizeof(pid_final)) + (*s_argument_thread).pipe_nombre_elements_attente[1], + &caractere, sizeof(caractere))) != sizeof(caractere)) { if (longueur_ecriture == -1) { @@ -1583,12 +1524,10 @@ instruction_detach(struct_processus *s_e (*s_etat_processus).presence_pipes = d_vrai; (*s_etat_processus).debug_programme = d_faux; (*s_etat_processus).pipe_donnees = (*s_argument_thread).pipe_objets[1]; - (*s_etat_processus).pipe_nombre_objets_attente = (*s_argument_thread) - .pipe_nombre_objets_attente[1]; + (*s_etat_processus).pipe_nombre_elements_attente = (*s_argument_thread) + .pipe_nombre_elements_attente[1]; (*s_etat_processus).pipe_interruptions = (*s_argument_thread) .pipe_interruptions[1]; - (*s_etat_processus).pipe_nombre_interruptions_attente = - (*s_argument_thread).pipe_nombre_interruptions_attente[1]; (*s_etat_processus).pipe_injections = (*s_argument_thread).pipe_injections[0]; (*s_etat_processus).pipe_nombre_injections = @@ -1632,21 +1571,11 @@ instruction_detach(struct_processus *s_e { (*s_etat_processus).erreur_systeme = d_es; - pid_final = -2; - - while((longueur_ecriture = write_atomic(s_etat_processus, - (*s_argument_thread).pipe_nombre_interruptions_attente[1], - &pid_final, sizeof(pid_final))) != sizeof(pid_final)) - { - if (longueur_ecriture == -1) - { - break; - } - } + caractere = 0; while((longueur_ecriture = write_atomic(s_etat_processus, - (*s_argument_thread).pipe_nombre_objets_attente[1], - &pid_final, sizeof(pid_final))) != sizeof(pid_final)) + (*s_argument_thread).pipe_nombre_elements_attente[1], + &caractere, sizeof(caractere))) != sizeof(caractere)) { if (longueur_ecriture == -1) { @@ -1681,10 +1610,8 @@ instruction_detach(struct_processus *s_e close((*s_argument_thread2).pipe_acquittement[1]); close((*s_argument_thread2).pipe_injections[1]); close((*s_argument_thread2).pipe_nombre_injections[1]); - close((*s_argument_thread2).pipe_nombre_objets_attente[0]); + close((*s_argument_thread2).pipe_nombre_elements_attente[0]); close((*s_argument_thread2).pipe_interruptions[0]); - close((*s_argument_thread2) - .pipe_nombre_interruptions_attente[0]); pthread_mutex_destroy(&((*s_argument_thread2).mutex)); @@ -1713,21 +1640,11 @@ instruction_detach(struct_processus *s_e { (*s_etat_processus).erreur_systeme = d_es; - pid_final = -2; + caractere = 0; while((longueur_ecriture = write_atomic(s_etat_processus, - (*s_argument_thread).pipe_nombre_interruptions_attente[1], - &pid_final, sizeof(pid_final))) != sizeof(pid_final)) - { - if (longueur_ecriture == -1) - { - break; - } - } - - while((longueur_ecriture = write_atomic(s_etat_processus, - (*s_argument_thread).pipe_nombre_objets_attente[1], - &pid_final, sizeof(pid_final))) != sizeof(pid_final)) + (*s_argument_thread).pipe_nombre_elements_attente[1], + &caractere, sizeof(caractere))) != sizeof(caractere)) { if (longueur_ecriture == -1) { @@ -1778,21 +1695,11 @@ instruction_detach(struct_processus *s_e if ((*s_etat_processus).erreur_systeme != d_es) { - pid_final = -2; - - while((longueur_ecriture = write_atomic(s_etat_processus, - (*s_argument_thread).pipe_nombre_interruptions_attente[1], - &pid_final, sizeof(pid_final))) != sizeof(pid_final)) - { - if (longueur_ecriture == -1) - { - break; - } - } + caractere = 0; while((longueur_ecriture = write_atomic(s_etat_processus, - (*s_argument_thread).pipe_nombre_objets_attente[1], - &pid_final, sizeof(pid_final))) != sizeof(pid_final)) + (*s_argument_thread).pipe_nombre_elements_attente[1], + &caractere, sizeof(caractere))) != sizeof(caractere)) { if (longueur_ecriture == -1) { @@ -1831,21 +1738,11 @@ instruction_detach(struct_processus *s_e if ((*s_etat_processus).erreur_systeme != d_es) { - pid_final = -2; - - while((longueur_ecriture = write_atomic(s_etat_processus, - (*s_argument_thread).pipe_nombre_interruptions_attente[1], - &pid_final, sizeof(pid_final))) != sizeof(pid_final)) - { - if (longueur_ecriture == -1) - { - break; - } - } + caractere = 0; while((longueur_ecriture = write_atomic(s_etat_processus, - (*s_argument_thread).pipe_nombre_objets_attente[1], - &pid_final, sizeof(pid_final))) != sizeof(pid_final)) + (*s_argument_thread).pipe_nombre_elements_attente[1], + &caractere, sizeof(caractere))) != sizeof(caractere)) { if (longueur_ecriture == -1) { @@ -2097,21 +1994,11 @@ instruction_detach(struct_processus *s_e pthread_cancel((*s_etat_processus).thread_fusible); } - pid_final = -2; - - while((longueur_ecriture = write_atomic(s_etat_processus, - (*s_argument_thread).pipe_nombre_interruptions_attente[1], - &pid_final, sizeof(pid_final))) != sizeof(pid_final)) - { - if (longueur_ecriture == -1) - { - break; - } - } + caractere = 0; while((longueur_ecriture = write_atomic(s_etat_processus, - (*s_argument_thread).pipe_nombre_objets_attente[1], - &pid_final, sizeof(pid_final))) != sizeof(pid_final)) + (*s_argument_thread).pipe_nombre_elements_attente[1], + &caractere, sizeof(caractere))) != sizeof(caractere)) { if (longueur_ecriture == -1) { @@ -2140,7 +2027,7 @@ instruction_detach(struct_processus *s_e { while((longueur_ecriture = write_atomic(s_etat_processus, (*s_argument_thread).pipe_erreurs[1], - &((*s_etat_processus).erreur_execution), + (int *) &((*s_etat_processus).erreur_execution), sizeof((*s_etat_processus).erreur_execution))) != sizeof((*s_etat_processus).erreur_execution)) { @@ -2172,7 +2059,7 @@ instruction_detach(struct_processus *s_e { while((longueur_ecriture = write_atomic(s_etat_processus, (*s_argument_thread).pipe_erreurs[1], - &((*s_etat_processus).erreur_systeme), + (int *) &((*s_etat_processus).erreur_systeme), sizeof((*s_etat_processus).erreur_systeme))) != sizeof((*s_etat_processus).erreur_systeme)) { @@ -2212,9 +2099,8 @@ instruction_detach(struct_processus *s_e close((*s_argument_thread).pipe_erreurs[1]); close((*s_argument_thread).pipe_interruptions[1]); - close((*s_argument_thread).pipe_nombre_interruptions_attente[1]); + close((*s_argument_thread).pipe_nombre_elements_attente[1]); close((*s_argument_thread).pipe_objets[1]); - close((*s_argument_thread).pipe_nombre_objets_attente[1]); close((*s_argument_thread).pipe_injections[0]); close((*s_argument_thread).pipe_nombre_injections[0]); close((*s_argument_thread).pipe_acquittement[0]);