mirror of
				https://github.com/tmux/tmux.git
				synced 2025-11-04 00:56:10 +00:00 
			
		
		
		
	Merge branch 'obsd-master'
This commit is contained in:
		@@ -129,7 +129,7 @@ cmd_if_shell_exec(struct cmd *self, struct cmdq_item *item)
 | 
			
		||||
	memcpy(&cdata->mouse, &shared->mouse, sizeof cdata->mouse);
 | 
			
		||||
 | 
			
		||||
	job_run(shellcmd, s, cwd, NULL, cmd_if_shell_callback,
 | 
			
		||||
	    cmd_if_shell_free, cdata);
 | 
			
		||||
	    cmd_if_shell_free, cdata, 0);
 | 
			
		||||
	free(shellcmd);
 | 
			
		||||
 | 
			
		||||
	if (args_has(args, 'b'))
 | 
			
		||||
 
 | 
			
		||||
@@ -111,7 +111,7 @@ cmd_run_shell_exec(struct cmd *self, struct cmdq_item *item)
 | 
			
		||||
		cdata->item = item;
 | 
			
		||||
 | 
			
		||||
	job_run(cdata->cmd, s, cwd, NULL, cmd_run_shell_callback,
 | 
			
		||||
	    cmd_run_shell_free, cdata);
 | 
			
		||||
	    cmd_run_shell_free, cdata, 0);
 | 
			
		||||
 | 
			
		||||
	if (args_has(args, 'b'))
 | 
			
		||||
		return (CMD_RETURN_NORMAL);
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										2
									
								
								format.c
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								format.c
									
									
									
									
									
								
							@@ -295,7 +295,7 @@ format_job_get(struct format_tree *ft, const char *cmd)
 | 
			
		||||
	t = time(NULL);
 | 
			
		||||
	if (fj->job == NULL && (force || fj->last != t)) {
 | 
			
		||||
		fj->job = job_run(expanded, NULL, NULL, format_job_update,
 | 
			
		||||
		    format_job_complete, NULL, fj);
 | 
			
		||||
		    format_job_complete, NULL, fj, JOB_NOWAIT);
 | 
			
		||||
		if (fj->job == NULL) {
 | 
			
		||||
			free(fj->out);
 | 
			
		||||
			xasprintf(&fj->out, "<'%s' didn't start>", fj->cmd);
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										3
									
								
								job.c
									
									
									
									
									
								
							
							
						
						
									
										3
									
								
								job.c
									
									
									
									
									
								
							@@ -43,7 +43,7 @@ struct joblist	all_jobs = LIST_HEAD_INITIALIZER(all_jobs);
 | 
			
		||||
struct job *
 | 
			
		||||
job_run(const char *cmd, struct session *s, const char *cwd,
 | 
			
		||||
    job_update_cb updatecb, job_complete_cb completecb, job_free_cb freecb,
 | 
			
		||||
    void *data)
 | 
			
		||||
    void *data, int flags)
 | 
			
		||||
{
 | 
			
		||||
	struct job	*job;
 | 
			
		||||
	struct environ	*env;
 | 
			
		||||
@@ -110,6 +110,7 @@ job_run(const char *cmd, struct session *s, const char *cwd,
 | 
			
		||||
 | 
			
		||||
	job = xmalloc(sizeof *job);
 | 
			
		||||
	job->state = JOB_RUNNING;
 | 
			
		||||
	job->flags = flags;
 | 
			
		||||
 | 
			
		||||
	job->cmd = xstrdup(cmd);
 | 
			
		||||
	job->pid = pid;
 | 
			
		||||
 
 | 
			
		||||
@@ -1289,6 +1289,8 @@ server_client_check_exit(struct client *c)
 | 
			
		||||
	if (EVBUFFER_LENGTH(c->stderr_data) != 0)
 | 
			
		||||
		return;
 | 
			
		||||
 | 
			
		||||
	if (c->flags & CLIENT_ATTACHED)
 | 
			
		||||
		notify_client("client-detached", c);
 | 
			
		||||
	proc_send(c->peer, MSG_EXIT, -1, &c->retval, sizeof c->retval);
 | 
			
		||||
	c->flags &= ~CLIENT_EXIT;
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										11
									
								
								server.c
									
									
									
									
									
								
							
							
						
						
									
										11
									
								
								server.c
									
									
									
									
									
								
							@@ -243,6 +243,7 @@ server_loop(void)
 | 
			
		||||
{
 | 
			
		||||
	struct client	*c;
 | 
			
		||||
	u_int		 items;
 | 
			
		||||
	struct job	*job;
 | 
			
		||||
 | 
			
		||||
	do {
 | 
			
		||||
		items = cmdq_next(NULL);
 | 
			
		||||
@@ -275,6 +276,11 @@ server_loop(void)
 | 
			
		||||
	if (!TAILQ_EMPTY(&clients))
 | 
			
		||||
		return (0);
 | 
			
		||||
 | 
			
		||||
	LIST_FOREACH(job, &all_jobs, entry) {
 | 
			
		||||
		if ((~job->flags & JOB_NOWAIT) && job->state == JOB_RUNNING)
 | 
			
		||||
			return (0);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return (1);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -290,8 +296,11 @@ server_send_exit(void)
 | 
			
		||||
	TAILQ_FOREACH_SAFE(c, &clients, entry, c1) {
 | 
			
		||||
		if (c->flags & CLIENT_SUSPENDED)
 | 
			
		||||
			server_client_lost(c);
 | 
			
		||||
		else
 | 
			
		||||
		else {
 | 
			
		||||
			if (c->flags & CLIENT_ATTACHED)
 | 
			
		||||
				notify_client("client-detached", c);
 | 
			
		||||
			proc_send(c->peer, MSG_SHUTDOWN, -1, NULL, 0);
 | 
			
		||||
		}
 | 
			
		||||
		c->session = NULL;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										5
									
								
								tmux.h
									
									
									
									
									
								
							
							
						
						
									
										5
									
								
								tmux.h
									
									
									
									
									
								
							@@ -626,6 +626,9 @@ struct job {
 | 
			
		||||
		JOB_CLOSED
 | 
			
		||||
	} state;
 | 
			
		||||
 | 
			
		||||
	int			 flags;
 | 
			
		||||
#define JOB_NOWAIT 0x1
 | 
			
		||||
 | 
			
		||||
	char			*cmd;
 | 
			
		||||
	pid_t			 pid;
 | 
			
		||||
	int			 status;
 | 
			
		||||
@@ -1653,7 +1656,7 @@ extern const struct options_table_entry options_table[];
 | 
			
		||||
/* job.c */
 | 
			
		||||
extern struct joblist all_jobs;
 | 
			
		||||
struct job	*job_run(const char *, struct session *, const char *,
 | 
			
		||||
		     job_update_cb, job_complete_cb, job_free_cb, void *);
 | 
			
		||||
		     job_update_cb, job_complete_cb, job_free_cb, void *, int);
 | 
			
		||||
void		 job_free(struct job *);
 | 
			
		||||
void		 job_died(struct job *, int);
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -1677,7 +1677,7 @@ window_copy_copy_pipe(struct window_pane *wp, struct session *s,
 | 
			
		||||
		return;
 | 
			
		||||
	expanded = format_single(NULL, arg, NULL, s, NULL, wp);
 | 
			
		||||
 | 
			
		||||
	job = job_run(expanded, s, NULL, NULL, NULL, NULL, NULL);
 | 
			
		||||
	job = job_run(expanded, s, NULL, NULL, NULL, NULL, NULL, JOB_NOWAIT);
 | 
			
		||||
	bufferevent_write(job->event, buf, len);
 | 
			
		||||
 | 
			
		||||
	free(expanded);
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user