mirror of
				https://github.com/tmux/tmux.git
				synced 2025-11-04 00:56:10 +00:00 
			
		
		
		
	Catch SIGHUP and terminate if running as a client. This prevents clients
from being left hanging around when, for example, a SSH session is disconnected. ok nicm@
This commit is contained in:
		
							
								
								
									
										5
									
								
								client.c
									
									
									
									
									
								
							
							
						
						
									
										5
									
								
								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;
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										8
									
								
								signal.c
									
									
									
									
									
								
							
							
						
						
									
										8
									
								
								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);
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user