# HG changeset patch # User Richard M. Stallman # Date 882669992 0 # Node ID 35972a1f8f1bfff8142a7107346da626e9740e4c # Parent fd12a2180159dfd9f999b9f8bf19b8f0428f7071 (Vsignal_USR1_hook, Vsignal_USR2_hook): New variables. (syms_of_emacs): Set up Lisp variables. (handle_USR1_signal, handle_USR2_signal): New signal handlers. (main): Set up signal handlers. diff -r fd12a2180159 -r 35972a1f8f1b src/emacs.c --- a/src/emacs.c Sun Dec 21 01:59:49 1997 +0000 +++ b/src/emacs.c Sun Dec 21 02:06:32 1997 +0000 @@ -76,6 +76,14 @@ /* Hook run by `kill-emacs' before it does really anything. */ Lisp_Object Vkill_emacs_hook; +#ifdef SIGUSR1 +/* Hooks for signal USR1 and USR2 handing */ +Lisp_Object Vsignal_USR1_hook; +#ifdef SIGUSR2 +Lisp_Object Vsignal_USR2_hook; +#endif +#endif + /* Set nonzero after Emacs has started up the first time. Prevents reinitialization of the Lisp world and keymaps on subsequent starts. */ @@ -165,6 +173,41 @@ /* Nonzero if handling a fatal error already */ int fatal_error_in_progress; +#ifdef SIGUSR1 +int SIGUSR1_in_progress=0; +SIGTYPE +handle_USR1_signal (sig) + int sig; +{ + if (! SIGUSR1_in_progress) + { + SIGUSR1_in_progress = 1; + + if (!NILP (Vrun_hooks) && !noninteractive) + call1 (Vrun_hooks, intern ("signal-USR1-hook")); + + SIGUSR1_in_progress = 0; + } +} +#ifdef SIGUSR2 +int SIGUSR2_in_progress=0; +SIGTYPE +handle_USR2_signal (sig) + int sig; +{ + if (! SIGUSR2_in_progress) + { + SIGUSR2_in_progress = 1; + + if (!NILP (Vrun_hooks) && !noninteractive) + call1 (Vrun_hooks, intern ("signal-USR2-hook")); + + SIGUSR2_in_progress = 0; + } +} +#endif +#endif + /* Handle bus errors, illegal instruction, etc. */ SIGTYPE fatal_error_signal (sig) @@ -817,6 +860,12 @@ signal (SIGQUIT, fatal_error_signal); signal (SIGILL, fatal_error_signal); signal (SIGTRAP, fatal_error_signal); +#ifdef SIGUSR1 + signal (SIGUSR1, handle_USR1_signal); +#ifdef SIGUSR2 + signal (SIGUSR2, handle_USR2_signal); +#endif +#endif #ifdef SIGABRT signal (SIGABRT, fatal_error_signal); #endif @@ -1706,6 +1755,18 @@ see `kill-emacs-query-functions' instead."); Vkill_emacs_hook = Qnil; +#ifdef SIGUSR1 + DEFVAR_LISP ("signal-USR1-hook", &Vsignal_USR1_hook, + "Hook to be run whenever emacs recieves a USR1 signal"); + Vsignal_USR1_hook = Qnil; +#ifdef SIGUSR2 + DEFVAR_LISP ("signal-USR2-hook", &Vsignal_USR2_hook, + "Hook to be run whenever emacs recieves a USR2 signal"); + Vsignal_USR2_hook = Qnil; +#endif +#endif + + DEFVAR_INT ("emacs-priority", &emacs_priority, "Priority for Emacs to run at.\n\ This value is effective only if set before Emacs is dumped,\n\