mirror of
				https://github.com/tmux/tmux.git
				synced 2025-11-04 00:56:10 +00:00 
			
		
		
		
	Don't reset the activity timer for unattached sessions every second,
this screws up the choice of most-recently-used. Instead, break the time update into a little function and do it when the session is attached. Pointed out by joshe@.
This commit is contained in:
		@@ -74,6 +74,7 @@ cmd_attach_session_exec(struct cmd *self, struct cmd_ctx *ctx)
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		ctx->curclient->session = s;
 | 
			
		||||
		session_update_activity(s);
 | 
			
		||||
		server_redraw_client(ctx->curclient);
 | 
			
		||||
	} else {
 | 
			
		||||
		if (!(ctx->cmdclient->flags & CLIENT_TERMINAL)) {
 | 
			
		||||
@@ -96,6 +97,7 @@ cmd_attach_session_exec(struct cmd *self, struct cmd_ctx *ctx)
 | 
			
		||||
			server_write_session(s, MSG_DETACH, NULL, 0);
 | 
			
		||||
 | 
			
		||||
		ctx->cmdclient->session = s;
 | 
			
		||||
		session_update_activity(s);
 | 
			
		||||
		server_write_client(ctx->cmdclient, MSG_READY, NULL, 0);
 | 
			
		||||
 | 
			
		||||
		update = options_get_string(&s->options, "update-environment");
 | 
			
		||||
 
 | 
			
		||||
@@ -284,12 +284,14 @@ cmd_new_session_exec(struct cmd *self, struct cmd_ctx *ctx)
 | 
			
		||||
			if (old_s != NULL)
 | 
			
		||||
				ctx->cmdclient->last_session = old_s;
 | 
			
		||||
			ctx->cmdclient->session = s;
 | 
			
		||||
			session_update_activity(s);
 | 
			
		||||
			server_redraw_client(ctx->cmdclient);
 | 
			
		||||
		} else {
 | 
			
		||||
			old_s = ctx->curclient->session;
 | 
			
		||||
			if (old_s != NULL)
 | 
			
		||||
				ctx->curclient->last_session = old_s;
 | 
			
		||||
			ctx->curclient->session = s;
 | 
			
		||||
			session_update_activity(s);
 | 
			
		||||
			server_redraw_client(ctx->curclient);
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 
 | 
			
		||||
@@ -173,6 +173,7 @@ cmd_switch_client_exec(struct cmd *self, struct cmd_ctx *ctx)
 | 
			
		||||
	if (c->session != NULL)
 | 
			
		||||
		c->last_session = c->session;
 | 
			
		||||
	c->session = s;
 | 
			
		||||
	session_update_activity(s);
 | 
			
		||||
 | 
			
		||||
	recalculate_sizes();
 | 
			
		||||
	server_check_unattached();
 | 
			
		||||
 
 | 
			
		||||
@@ -761,11 +761,8 @@ server_client_msg_dispatch(struct client *c)
 | 
			
		||||
 | 
			
		||||
			if (gettimeofday(&c->activity_time, NULL) != 0)
 | 
			
		||||
				fatal("gettimeofday");
 | 
			
		||||
			if (c->session != NULL) {
 | 
			
		||||
				memcpy(&c->session->activity_time,
 | 
			
		||||
				    &c->activity_time,
 | 
			
		||||
				    sizeof c->session->activity_time);
 | 
			
		||||
			}
 | 
			
		||||
			if (c->session != NULL)
 | 
			
		||||
				session_update_activity(c->session);
 | 
			
		||||
 | 
			
		||||
			tty_start_tty(&c->tty);
 | 
			
		||||
			server_redraw_client(c);
 | 
			
		||||
 
 | 
			
		||||
@@ -396,6 +396,7 @@ server_destroy_session(struct session *s)
 | 
			
		||||
		} else {
 | 
			
		||||
			c->last_session = NULL;
 | 
			
		||||
			c->session = s_new;
 | 
			
		||||
			session_update_activity(s_new);
 | 
			
		||||
			server_redraw_client(c);
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										12
									
								
								server.c
									
									
									
									
									
								
							
							
						
						
									
										12
									
								
								server.c
									
									
									
									
									
								
							@@ -494,12 +494,8 @@ server_lock_server(void)
 | 
			
		||||
 | 
			
		||||
	t = time(NULL);
 | 
			
		||||
	RB_FOREACH(s, sessions, &sessions) {
 | 
			
		||||
		if (s->flags & SESSION_UNATTACHED) {
 | 
			
		||||
			if (gettimeofday(&s->activity_time, NULL) != 0)
 | 
			
		||||
				fatal("gettimeofday failed");
 | 
			
		||||
		if (s->flags & SESSION_UNATTACHED)
 | 
			
		||||
			continue;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		timeout = options_get_number(&s->options, "lock-after-time");
 | 
			
		||||
		if (timeout <= 0 || t <= s->activity_time.tv_sec + timeout)
 | 
			
		||||
			return;	/* not timed out */
 | 
			
		||||
@@ -519,12 +515,8 @@ server_lock_sessions(void)
 | 
			
		||||
 | 
			
		||||
	t = time(NULL);
 | 
			
		||||
	RB_FOREACH(s, sessions, &sessions) {
 | 
			
		||||
		if (s->flags & SESSION_UNATTACHED) {
 | 
			
		||||
			if (gettimeofday(&s->activity_time, NULL) != 0)
 | 
			
		||||
				fatal("gettimeofday failed");
 | 
			
		||||
		if (s->flags & SESSION_UNATTACHED)
 | 
			
		||||
			continue;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		timeout = options_get_number(&s->options, "lock-after-time");
 | 
			
		||||
		if (timeout > 0 && t > s->activity_time.tv_sec + timeout) {
 | 
			
		||||
			server_lock_session(s);
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										10
									
								
								session.c
									
									
									
									
									
								
							
							
						
						
									
										10
									
								
								session.c
									
									
									
									
									
								
							@@ -97,7 +97,7 @@ session_create(const char *name, const char *cmd, const char *cwd,
 | 
			
		||||
 | 
			
		||||
	if (gettimeofday(&s->creation_time, NULL) != 0)
 | 
			
		||||
		fatal("gettimeofday failed");
 | 
			
		||||
	memcpy(&s->activity_time, &s->creation_time, sizeof s->activity_time);
 | 
			
		||||
	session_update_activity(s);
 | 
			
		||||
 | 
			
		||||
	s->cwd = xstrdup(cwd);
 | 
			
		||||
 | 
			
		||||
@@ -164,6 +164,14 @@ session_destroy(struct session *s)
 | 
			
		||||
	RB_INSERT(sessions, &dead_sessions, s);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* Update session active time. */
 | 
			
		||||
void
 | 
			
		||||
session_update_activity(struct session *s)
 | 
			
		||||
{
 | 
			
		||||
	if (gettimeofday(&s->activity_time, NULL) != 0)
 | 
			
		||||
		fatal("gettimeofday");
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* Find the next usable session. */
 | 
			
		||||
struct session *
 | 
			
		||||
session_next_session(struct session *s)
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										1
									
								
								tmux.h
									
									
									
									
									
								
							
							
						
						
									
										1
									
								
								tmux.h
									
									
									
									
									
								
							@@ -1980,6 +1980,7 @@ struct session	*session_create(const char *, const char *, const char *,
 | 
			
		||||
		     struct environ *, struct termios *, int, u_int, u_int,
 | 
			
		||||
		     char **);
 | 
			
		||||
void		 session_destroy(struct session *);
 | 
			
		||||
void		 session_update_activity(struct session *);
 | 
			
		||||
struct session	*session_next_session(struct session *);
 | 
			
		||||
struct session	*session_previous_session(struct session *);
 | 
			
		||||
struct winlink	*session_new(struct session *,
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user