diff --git a/client.c b/client.c index 8aa4e845..14248761 100644 --- a/client.c +++ b/client.c @@ -1,4 +1,4 @@ -/* $Id: client.c,v 1.91 2010-05-14 14:30:00 tcunha Exp $ */ +/* $Id: client.c,v 1.92 2010-05-14 14:35:26 tcunha Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net> @@ -210,6 +210,11 @@ client_signal(int sig, unused short events, unused void *data) struct sigaction sigact; switch (sig) { + case SIGHUP: + client_exitmsg = "lost tty"; + client_exitval = 1; + client_write_server(MSG_EXITING, NULL, 0); + break; case SIGTERM: client_exitmsg = "terminated"; client_exitval = 1; diff --git a/signal.c b/signal.c index beb30cbc..602c7bb2 100644 --- a/signal.c +++ b/signal.c @@ -1,4 +1,4 @@ -/* $Id: signal.c,v 1.1 2010-05-14 14:30:01 tcunha Exp $ */ +/* $Id: signal.c,v 1.2 2010-05-14 14:35:26 tcunha Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net> @@ -22,6 +22,7 @@ #include "tmux.h" +struct event ev_sighup; struct event ev_sigchld; struct event ev_sigcont; struct event ev_sigterm; @@ -45,9 +46,9 @@ set_signals(void(*handler)(int, short, unused void *)) fatal("sigaction failed"); if (sigaction(SIGTSTP, &sigact, NULL) != 0) fatal("sigaction failed"); - if (sigaction(SIGHUP, &sigact, NULL) != 0) - fatal("sigaction failed"); + signal_set(&ev_sighup, SIGHUP, handler, NULL); + signal_add(&ev_sighup, NULL); signal_set(&ev_sigchld, SIGCHLD, handler, NULL); signal_add(&ev_sigchld, NULL); signal_set(&ev_sigcont, SIGCONT, handler, NULL); @@ -77,9 +78,8 @@ clear_signals(void) fatal("sigaction failed"); if (sigaction(SIGTSTP, &sigact, NULL) != 0) fatal("sigaction failed"); - if (sigaction(SIGHUP, &sigact, NULL) != 0) - fatal("sigaction failed"); + event_del(&ev_sighup); event_del(&ev_sigchld); event_del(&ev_sigcont); event_del(&ev_sigterm);