mirror of
				https://github.com/tmux/tmux.git
				synced 2025-11-04 00:56:10 +00:00 
			
		
		
		
	Sync OpenBSD patchset 863:
Add a -P option to detach to HUP the client's parent process (usually causing it to exit as well).
This commit is contained in:
		
							
								
								
									
										21
									
								
								client.c
									
									
									
									
									
								
							
							
						
						
									
										21
									
								
								client.c
									
									
									
									
									
								
							@@ -1,4 +1,4 @@
 | 
			
		||||
/* $Id: client.c,v 1.101 2011-01-21 23:44:13 tcunha Exp $ */
 | 
			
		||||
/* $Id: client.c,v 1.102 2011-03-19 23:27:35 tcunha Exp $ */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
 | 
			
		||||
@@ -36,6 +36,7 @@ struct imsgbuf	client_ibuf;
 | 
			
		||||
struct event	client_event;
 | 
			
		||||
const char     *client_exitmsg;
 | 
			
		||||
int		client_exitval;
 | 
			
		||||
enum msgtype	client_exittype;
 | 
			
		||||
int		client_attached;
 | 
			
		||||
 | 
			
		||||
int		client_connect(char *, int);
 | 
			
		||||
@@ -100,6 +101,7 @@ client_main(int argc, char **argv, int flags)
 | 
			
		||||
	struct cmd_list		*cmdlist;
 | 
			
		||||
	struct msg_command_data	 cmddata;
 | 
			
		||||
	int			 cmdflags, fd;
 | 
			
		||||
	pid_t			 ppid;
 | 
			
		||||
	enum msgtype		 msg;
 | 
			
		||||
	char			*cause;
 | 
			
		||||
 | 
			
		||||
@@ -194,8 +196,14 @@ client_main(int argc, char **argv, int flags)
 | 
			
		||||
	event_dispatch();
 | 
			
		||||
 | 
			
		||||
	/* Print the exit message, if any, and exit. */
 | 
			
		||||
	if (client_attached && client_exitmsg != NULL && !login_shell)
 | 
			
		||||
		printf("[%s]\n", client_exitmsg);
 | 
			
		||||
	if (client_attached) {
 | 
			
		||||
		if (client_exitmsg != NULL && !login_shell)
 | 
			
		||||
			printf("[%s]\n", client_exitmsg);
 | 
			
		||||
 | 
			
		||||
		ppid = getppid();
 | 
			
		||||
		if (client_exittype == MSG_DETACHKILL && ppid > 1)
 | 
			
		||||
			kill(ppid, SIGHUP);
 | 
			
		||||
	}
 | 
			
		||||
	return (client_exitval);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -436,12 +444,17 @@ client_dispatch_attached(void)
 | 
			
		||||
 | 
			
		||||
		log_debug("client got %d", imsg.hdr.type);
 | 
			
		||||
		switch (imsg.hdr.type) {
 | 
			
		||||
		case MSG_DETACHKILL:
 | 
			
		||||
		case MSG_DETACH:
 | 
			
		||||
			if (datalen != 0)
 | 
			
		||||
				fatalx("bad MSG_DETACH size");
 | 
			
		||||
 | 
			
		||||
			client_exittype = imsg.hdr.type;
 | 
			
		||||
			if (imsg.hdr.type == MSG_DETACHKILL)
 | 
			
		||||
				client_exitmsg = "detached and SIGHUP";
 | 
			
		||||
			else
 | 
			
		||||
				client_exitmsg = "detached";
 | 
			
		||||
			client_write_server(MSG_EXITING, NULL, 0);
 | 
			
		||||
			client_exitmsg = "detached";
 | 
			
		||||
			break;
 | 
			
		||||
		case MSG_EXIT:
 | 
			
		||||
			if (datalen != 0 &&
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user