--- rpl/src/rpl.c 2010/04/29 07:30:58 1.23 +++ rpl/src/rpl.c 2010/06/17 11:00:23 1.29 @@ -1,6 +1,6 @@ /* ================================================================================ - RPL/2 (R) version 4.0.15 + RPL/2 (R) version 4.0.16 Copyright (C) 1989-2010 Dr. BERTRAND Joël This file is part of RPL/2. @@ -99,6 +99,10 @@ rplinit(int argc, char *argv[], unsigned volatile int erreur; volatile unsigned char traitement_fichier_temporaire; +# ifdef DEBUG_MEMOIRE + debug_memoire_initialisation(); +# endif + setvbuf(stdout, NULL, _IOLBF, 0); setvbuf(stderr, NULL, _IOLBF, 0); @@ -447,6 +451,9 @@ rplinit(int argc, char *argv[], unsigned return(EXIT_FAILURE); } + action.sa_sigaction = interruption11; + action.sa_flags = SA_NODEFER | SA_ONSTACK | SA_SIGINFO; + if (sigaction(SIGFABORT, &action, NULL) != 0) { erreur = d_es_signal; @@ -3450,6 +3457,8 @@ rplinit(int argc, char *argv[], unsigned } # ifndef Cygwin + (*s_etat_processus).pile_signal.ss_flags = SS_DISABLE; + sigaltstack(&((*s_etat_processus).pile_signal), NULL); free((*s_etat_processus).pile_signal.ss_sp); # endif @@ -3462,6 +3471,7 @@ rplinit(int argc, char *argv[], unsigned retrait_thread(s_etat_processus); pthread_mutex_destroy(&((*s_etat_processus).mutex)); + # ifndef SEMAPHORES_NOMMES sem_post(&((*s_etat_processus).semaphore_fork)); sem_destroy(&((*s_etat_processus).semaphore_fork)); @@ -3471,7 +3481,6 @@ rplinit(int argc, char *argv[], unsigned # endif free((*s_etat_processus).localisation); - free(s_etat_processus); # ifndef SEMAPHORES_NOMMES sem_destroy(&semaphore_liste_threads); @@ -3489,8 +3498,11 @@ rplinit(int argc, char *argv[], unsigned sem_gestionnaires_signaux_atomique); # endif + free(s_etat_processus); + # ifdef DEBUG_MEMOIRE - debug_memoire_verification(s_etat_processus); + debug_memoire_verification(); + analyse_post_mortem(); # endif return((erreur == d_absence_erreur) ? EXIT_SUCCESS : EXIT_FAILURE);