--- rpl/src/rpl.c 2010/08/22 16:38:36 1.42 +++ rpl/src/rpl.c 2010/09/06 16:50:17 1.49 @@ -1,6 +1,6 @@ /* ================================================================================ - RPL/2 (R) version 4.0.18 + RPL/2 (R) version 4.0.19 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 @@ -240,7 +240,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 @@ -248,7 +248,17 @@ rplinit(int argc, char *argv[], unsigned # ifdef _BROKEN_SIGINFO creation_fifos_signaux(s_etat_processus); +# ifdef return +# undef return +# endif +# define return destruction_fifos_signaux(s_etat_processus); return +# endif + insertion_thread(s_etat_processus, d_vrai); + +# ifndef OS2 + localisation_courante(s_etat_processus); +# else if ((*s_etat_processus).erreur_systeme != d_es) { if (((*s_etat_processus).localisation = malloc((strlen(d_locale) + 1) * @@ -268,15 +278,8 @@ rplinit(int argc, char *argv[], unsigned strcpy((*s_etat_processus).localisation, d_locale); } -# ifdef return -# undef return -# endif -# define return destruction_fifos_signaux(s_etat_processus); return # endif - insertion_thread(s_etat_processus, d_vrai); - - localisation_courante(s_etat_processus); (*s_etat_processus).erreur_systeme = d_es; if ((*s_etat_processus).localisation == NULL) @@ -416,7 +419,7 @@ rplinit(int argc, char *argv[], unsigned # else action.sa_handler = interruption1; # endif - action.sa_flags = SA_ONSTACK | SA_SIGINFO; + action.sa_flags = SA_ONSTACK | SA_SIGINFO | SA_NODEFER; if (sigaction(SIGINT, &action, NULL) != 0) { @@ -462,8 +465,7 @@ rplinit(int argc, char *argv[], unsigned # else action.sa_handler = interruption4; # endif - // SIGCONT ne doit pas pouvoir être appelé depuis son gestionnaire. - action.sa_flags = SA_ONSTACK | SA_SIGINFO; + action.sa_flags = SA_ONSTACK | SA_SIGINFO | SA_NODEFER; if (sigaction(SIGSTART, &action, NULL) != 0) { @@ -1597,7 +1599,7 @@ rplinit(int argc, char *argv[], unsigned # else action.sa_handler = interruption10; # endif - action.sa_flags = SA_ONSTACK | SA_SIGINFO; + action.sa_flags = SA_ONSTACK | SA_SIGINFO | SA_NODEFER; if (sigaction(SIGHUP, &action, NULL) != 0) { @@ -1972,6 +1974,7 @@ rplinit(int argc, char *argv[], unsigned (*s_etat_processus).pid_processus_pere = getpid(); (*s_etat_processus).processus_detache = d_vrai; (*s_etat_processus).var_volatile_processus_pere = -1; + (*s_etat_processus).var_volatile_processus_racine = -1; (*s_etat_processus).var_volatile_traitement_retarde_stop = 0; (*s_etat_processus).var_volatile_alarme = 0; (*s_etat_processus).var_volatile_requete_arret = 0;