summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--client.c5
-rw-r--r--signal.c8
2 files changed, 9 insertions, 4 deletions
diff --git a/client.c b/client.c
index 5940f62e..092ae555 100644
--- a/client.c
+++ b/client.c
@@ -206,6 +206,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 b84d90be..ff1a4245 100644
--- a/signal.c
+++ b/signal.c
@@ -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);