Mercurial > octave-nkf
changeset 17569:9d0992c6df30
arrange to pass signals to the GUI subprocess
* sighandlers.h, sighandlers.cc (gui_pid): New static variable.
(gui_driver_sig_handler, install_gui_driver_signal_handlers):
New functions.
* octave-gui.cc (dissociate_terminal):
Call install_gui_driver_signal_handlers from parent process.
author | John W. Eaton <jwe@octave.org> |
---|---|
date | Fri, 04 Oct 2013 15:26:10 -0400 |
parents | 1b388d922e6b |
children | 1c7d768c3847 |
files | libgui/src/octave-gui.cc libinterp/corefcn/sighandlers.cc libinterp/corefcn/sighandlers.h |
diffstat | 3 files changed, 137 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/libgui/src/octave-gui.cc Fri Oct 04 13:53:25 2013 -0400 +++ b/libgui/src/octave-gui.cc Fri Oct 04 15:26:10 2013 -0400 @@ -38,8 +38,11 @@ #include "lo-utils.h" #include "oct-env.h" +#include "oct-syscalls.h" #include "syswait.h" +#include "sighandlers.h" + #include "welcome-wizard.h" #include "resource-manager.h" #include "main-window.h" @@ -73,8 +76,7 @@ { // Parent - // FIXME -- we should catch signals and pass them on to the child - // process in some way, possibly translating SIGINT to SIGTERM. + install_gui_driver_signal_handlers (pid); int status;
--- a/libinterp/corefcn/sighandlers.cc Fri Oct 04 13:53:25 2013 -0400 +++ b/libinterp/corefcn/sighandlers.cc Fri Oct 04 15:26:10 2013 -0400 @@ -577,6 +577,137 @@ } +static pid_t gui_pid = 0; + +static void +gui_driver_sig_handler (int sig) +{ + if (gui_pid > 0) + octave_syscalls::kill (gui_pid, sig); +} + +void +install_gui_driver_signal_handlers (pid_t pid) +{ + gui_pid = pid; + +#ifdef SIGINT + octave_set_signal_handler (SIGINT, gui_driver_sig_handler); +#endif + +#ifdef SIGBREAK + octave_set_signal_handler (SIGBREAK, gui_driver_sig_handler); +#endif + +#ifdef SIGABRT + octave_set_signal_handler (SIGABRT, gui_driver_sig_handler); +#endif + +#ifdef SIGALRM + octave_set_signal_handler (SIGALRM, gui_driver_sig_handler); +#endif + +#ifdef SIGBUS + octave_set_signal_handler (SIGBUS, gui_driver_sig_handler); +#endif + + // SIGCHLD + // SIGCLD + // SIGCONT + +#ifdef SIGEMT + octave_set_signal_handler (SIGEMT, gui_driver_sig_handler); +#endif + +#ifdef SIGFPE + octave_set_signal_handler (SIGFPE, gui_driver_sig_handler); +#endif + +#ifdef SIGHUP + octave_set_signal_handler (SIGHUP, gui_driver_sig_handler); +#endif + +#ifdef SIGILL + octave_set_signal_handler (SIGILL, gui_driver_sig_handler); +#endif + + // SIGINFO + // SIGINT + +#ifdef SIGIOT + octave_set_signal_handler (SIGIOT, gui_driver_sig_handler); +#endif + +#ifdef SIGLOST + octave_set_signal_handler (SIGLOST, gui_driver_sig_handler); +#endif + +#ifdef SIGPIPE + octave_set_signal_handler (SIGPIPE, gui_driver_sig_handler); +#endif + +#ifdef SIGPOLL + octave_set_signal_handler (SIGPOLL, gui_driver_sig_handler); +#endif + + // SIGPROF + // SIGPWR + +#ifdef SIGQUIT + octave_set_signal_handler (SIGQUIT, gui_driver_sig_handler); +#endif + +#ifdef SIGSEGV + octave_set_signal_handler (SIGSEGV, gui_driver_sig_handler); +#endif + + // SIGSTOP + +#ifdef SIGSYS + octave_set_signal_handler (SIGSYS, gui_driver_sig_handler); +#endif + +#ifdef SIGTERM + octave_set_signal_handler (SIGTERM, gui_driver_sig_handler); +#endif + +#ifdef SIGTRAP + octave_set_signal_handler (SIGTRAP, gui_driver_sig_handler); +#endif + + // SIGTSTP + // SIGTTIN + // SIGTTOU + // SIGURG + +#ifdef SIGUSR1 + octave_set_signal_handler (SIGUSR1, gui_driver_sig_handler); +#endif + +#ifdef SIGUSR2 + octave_set_signal_handler (SIGUSR2, gui_driver_sig_handler); +#endif + +#ifdef SIGVTALRM + octave_set_signal_handler (SIGVTALRM, gui_driver_sig_handler); +#endif + +#ifdef SIGIO + octave_set_signal_handler (SIGIO, gui_driver_sig_handler); +#endif + + // SIGWINCH + +#ifdef SIGXCPU + octave_set_signal_handler (SIGXCPU, gui_driver_sig_handler); +#endif + +#ifdef SIGXFSZ + octave_set_signal_handler (SIGXFSZ, gui_driver_sig_handler); +#endif + +} + static octave_scalar_map make_sig_struct (void) {
--- a/libinterp/corefcn/sighandlers.h Fri Oct 04 13:53:25 2013 -0400 +++ b/libinterp/corefcn/sighandlers.h Fri Oct 04 15:26:10 2013 -0400 @@ -71,6 +71,8 @@ extern OCTINTERP_API void install_signal_handlers (void); +extern OCTINTERP_API void install_gui_driver_signal_handlers (pid_t pid); + extern OCTINTERP_API void octave_signal_handler (void); extern OCTINTERP_API octave_interrupt_handler octave_catch_interrupts (void);