--- rpl/src/rpl.c 2010/09/02 07:51:48 1.48 +++ rpl/src/rpl.c 2010/12/21 13:47:19 1.56 @@ -1,6 +1,6 @@ /* ================================================================================ - RPL/2 (R) version 4.0.19 + RPL/2 (R) version 4.0.20 Copyright (C) 1989-2010 Dr. BERTRAND Joël This file is part of RPL/2. @@ -23,7 +23,7 @@ #define MAIN_RPL #include "rpl-conv.h" -#ifdef SEMAPHORES_SYSV +#ifdef IPCS_SYSV #ifndef OS2 unsigned char *chemin_semaphores_SysV; #endif @@ -107,6 +107,10 @@ rplinit(int argc, char *argv[], unsigned errno = 0; +# ifdef DMALLOC + atexit(dmalloc_shutdown()); +# endif + # ifdef DEBUG_MEMOIRE debug_memoire_initialisation(); # endif @@ -240,7 +244,7 @@ rplinit(int argc, char *argv[], unsigned (*s_etat_processus).chemin_fichiers_temporaires = recherche_chemin_fichiers_temporaires(s_etat_processus); -# ifdef SEMAPHORES_SYSV +# ifdef IPCS_SYSV # ifndef OS2 chemin_semaphores_SysV = (*s_etat_processus).chemin_fichiers_temporaires; # endif @@ -419,7 +423,7 @@ rplinit(int argc, char *argv[], unsigned # else action.sa_handler = interruption1; # endif - action.sa_flags = SA_ONSTACK | SA_SIGINFO | SA_NODEFER; + action.sa_flags = SA_ONSTACK | SA_SIGINFO; if (sigaction(SIGINT, &action, NULL) != 0) { @@ -438,6 +442,23 @@ rplinit(int argc, char *argv[], unsigned return(EXIT_FAILURE); } + if (sigaction(SIGTERM, &action, NULL) != 0) + { + erreur = d_es_signal; + + if ((*s_etat_processus).langue == 'F') + { + printf("+++Système : Initialisation des signaux POSIX " + "impossible\n"); + } + else + { + printf("+++System : Initialization of POSIX signals failed\n"); + } + + return(EXIT_FAILURE); + } + # ifndef _BROKEN_SIGINFO action.sa_sigaction = interruption2; # else @@ -465,7 +486,8 @@ rplinit(int argc, char *argv[], unsigned # else action.sa_handler = interruption4; # endif - action.sa_flags = SA_ONSTACK | SA_SIGINFO | SA_NODEFER; + // SIGCONT ne doit pas pouvoir être appelé depuis son gestionnaire. + action.sa_flags = SA_ONSTACK | SA_SIGINFO; if (sigaction(SIGSTART, &action, NULL) != 0) { @@ -1599,7 +1621,7 @@ rplinit(int argc, char *argv[], unsigned # else action.sa_handler = interruption10; # endif - action.sa_flags = SA_ONSTACK | SA_SIGINFO | SA_NODEFER; + action.sa_flags = SA_ONSTACK | SA_SIGINFO; if (sigaction(SIGHUP, &action, NULL) != 0) { @@ -1819,6 +1841,7 @@ rplinit(int argc, char *argv[], unsigned (*s_etat_processus).autorisation_empilement_programme = 'N'; (*s_etat_processus).requete_arret = 'N'; (*s_etat_processus).evaluation_forcee = 'N'; + (*s_etat_processus).recherche_type = 'N'; (*s_etat_processus).constante_symbolique = 'N'; (*s_etat_processus).traitement_symbolique = 'N'; @@ -3556,12 +3579,6 @@ rplinit(int argc, char *argv[], unsigned } } -# 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); -# endif - closelog(); pthread_mutex_destroy(&((*s_etat_processus).protection_liste_mutexes));