--- rpl/src/instructions_d5.c 2010/08/13 21:00:37 1.35 +++ rpl/src/instructions_d5.c 2010/08/22 16:38:36 1.38 @@ -890,19 +890,6 @@ instruction_detach(struct_processus *s_e return; } -# ifdef _BROKEN_SIGINFO - if ((*s_etat_processus).langue == 'F') - { - printf("+++Attention : Support des processus multiples indisponible\n"); - } - else - { - printf("+++Attention : Multiprocess unavailable\n"); - } - - return; -# endif - if (test_cfsf(s_etat_processus, 31) == d_vrai) { if (empilement_pile_last(s_etat_processus, 1) == d_erreur) @@ -1341,6 +1328,11 @@ instruction_detach(struct_processus *s_e * Processus fils */ +# ifdef _BROKEN_SIGINFO + liberation_fifos_signaux(s_etat_processus); + creation_fifos_signaux(s_etat_processus); +# endif + if ((*s_etat_processus).debug == d_vrai) if (((*s_etat_processus).type_debug & d_debug_processus) != 0) @@ -1530,6 +1522,10 @@ instruction_detach(struct_processus *s_e } } +# ifdef _BROKEN_SIGINFO + destruction_fifos_signaux(s_etat_processus); +# endif + BUG(1, uprintf("Process management error line %d\n", __LINE__)); exit(EXIT_FAILURE); } @@ -1560,6 +1556,10 @@ instruction_detach(struct_processus *s_e } } +# ifdef _BROKEN_SIGINFO + destruction_fifos_signaux(s_etat_processus); +# endif + BUG(1, uprintf("Process management error line %d\n", __LINE__)); exit(EXIT_FAILURE); } @@ -1593,6 +1593,10 @@ instruction_detach(struct_processus *s_e } } +# ifdef _BROKEN_SIGINFO + destruction_fifos_signaux(s_etat_processus); +# endif + BUG(1, uprintf("Process management error line %d\n", __LINE__)); exit(EXIT_FAILURE); } @@ -1741,6 +1745,10 @@ instruction_detach(struct_processus *s_e } } +# ifdef _BROKEN_SIGINFO + destruction_fifos_signaux(s_etat_processus); +# endif + BUG(1, uprintf("Process management error line %d\n", __LINE__)); exit(EXIT_FAILURE); } @@ -1757,6 +1765,9 @@ instruction_detach(struct_processus *s_e (*s_argument_thread2).nombre_references--; BUG((*s_argument_thread2).nombre_references < 0, +# ifdef _BROKEN_SIGINFO + destruction_fifos_signaux(s_etat_processus), +# endif printf("(*s_argument_thread2).nombre_references = %d\n", (int) (*s_argument_thread2).nombre_references)); @@ -1820,6 +1831,10 @@ instruction_detach(struct_processus *s_e } } +# ifdef _BROKEN_SIGINFO + destruction_fifos_signaux(s_etat_processus); +# endif + BUG(1, uprintf("Process management error line %d\n", __LINE__)); exit(EXIT_FAILURE); } @@ -1884,6 +1899,10 @@ instruction_detach(struct_processus *s_e } } +# ifdef _BROKEN_SIGINFO + destruction_fifos_signaux(s_etat_processus); +# endif + BUG(1, uprintf("Process management error line %d\n", __LINE__)); exit(EXIT_FAILURE); } @@ -1936,6 +1955,10 @@ instruction_detach(struct_processus *s_e } } +# ifdef _BROKEN_SIGINFO + destruction_fifos_signaux(s_etat_processus); +# endif + BUG(1, uprintf("Process management error line %d\n", __LINE__)); exit(EXIT_FAILURE); } @@ -2484,6 +2507,10 @@ instruction_detach(struct_processus *s_e registre_stop; } +# ifdef _BROKEN_SIGINFO + destruction_fifos_signaux(s_etat_processus); +# endif + (*s_etat_processus).erreur_systeme = d_es_signal; exit(EXIT_FAILURE); } @@ -2518,6 +2545,10 @@ instruction_detach(struct_processus *s_e if (sigaction(SIGPIPE, ®istre, NULL) != 0) { +# ifdef _BROKEN_SIGINFO + destruction_fifos_signaux(s_etat_processus); +# endif + pthread_mutex_unlock(&((*s_etat_processus).mutex)); (*s_etat_processus).erreur_systeme = d_es_signal; @@ -2834,7 +2865,7 @@ instruction_detach(struct_processus *s_e liberation(s_etat_processus, s_objet); -# if !defined(Cygwin) +# if !defined(Cygwin) && !defined(OpenBSD) (*s_etat_processus).pile_signal.ss_flags = SS_DISABLE; sigaltstack(&((*s_etat_processus).pile_signal), NULL); free((*s_etat_processus).pile_signal.ss_sp); @@ -2911,6 +2942,10 @@ instruction_detach(struct_processus *s_e clear_history(); +# ifdef _BROKEN_SIGINFO + destruction_fifos_signaux(s_etat_processus); +# endif + free(s_etat_processus); # ifdef DEBUG_MEMOIRE