From d3c04b74ecdec884bfa29d50d4315cfad7a2717a Mon Sep 17 00:00:00 2001 From: Tiago Cunha Date: Mon, 3 Jan 2011 23:27:54 +0000 Subject: [PATCH] Sync OpenBSD patchset 819: 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@. --- cmd-attach-session.c | 4 +++- cmd-new-session.c | 4 +++- cmd-switch-client.c | 3 ++- server-client.c | 9 +++------ server-fn.c | 3 ++- server.c | 14 +++----------- session.c | 12 ++++++++++-- tmux.h | 3 ++- 8 files changed, 28 insertions(+), 24 deletions(-) diff --git a/cmd-attach-session.c b/cmd-attach-session.c index 86fe53f0..32ac58a9 100644 --- a/cmd-attach-session.c +++ b/cmd-attach-session.c @@ -1,4 +1,4 @@ -/* $Id: cmd-attach-session.c,v 1.37 2010-12-22 15:36:44 tcunha Exp $ */ +/* $Id: cmd-attach-session.c,v 1.38 2011-01-03 23:27:54 tcunha Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott @@ -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"); diff --git a/cmd-new-session.c b/cmd-new-session.c index 4e5192bd..b82f6b31 100644 --- a/cmd-new-session.c +++ b/cmd-new-session.c @@ -1,4 +1,4 @@ -/* $Id: cmd-new-session.c,v 1.80 2010-12-22 15:31:00 tcunha Exp $ */ +/* $Id: cmd-new-session.c,v 1.81 2011-01-03 23:27:54 tcunha Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott @@ -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); } } diff --git a/cmd-switch-client.c b/cmd-switch-client.c index e12bd1d6..809dff48 100644 --- a/cmd-switch-client.c +++ b/cmd-switch-client.c @@ -1,4 +1,4 @@ -/* $Id: cmd-switch-client.c,v 1.23 2010-12-22 15:31:00 tcunha Exp $ */ +/* $Id: cmd-switch-client.c,v 1.24 2011-01-03 23:27:54 tcunha Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott @@ -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(); diff --git a/server-client.c b/server-client.c index 7a7e88bc..046f9f51 100644 --- a/server-client.c +++ b/server-client.c @@ -1,4 +1,4 @@ -/* $Id: server-client.c,v 1.49 2010-12-30 22:27:38 tcunha Exp $ */ +/* $Id: server-client.c,v 1.50 2011-01-03 23:27:54 tcunha Exp $ */ /* * Copyright (c) 2009 Nicholas Marriott @@ -760,11 +760,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); diff --git a/server-fn.c b/server-fn.c index 6d556695..fa470e5a 100644 --- a/server-fn.c +++ b/server-fn.c @@ -1,4 +1,4 @@ -/* $Id: server-fn.c,v 1.117 2010-12-25 23:44:37 tcunha Exp $ */ +/* $Id: server-fn.c,v 1.118 2011-01-03 23:27:54 tcunha Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott @@ -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); } } diff --git a/server.c b/server.c index 20cad7c5..6095bdd3 100644 --- a/server.c +++ b/server.c @@ -1,4 +1,4 @@ -/* $Id: server.c,v 1.250 2010-12-30 22:39:49 tcunha Exp $ */ +/* $Id: server.c,v 1.251 2011-01-03 23:27:54 tcunha Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott @@ -495,12 +495,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 */ @@ -520,12 +516,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); diff --git a/session.c b/session.c index da2adbe1..22572016 100644 --- a/session.c +++ b/session.c @@ -1,4 +1,4 @@ -/* $Id: session.c,v 1.84 2010-12-30 22:39:49 tcunha Exp $ */ +/* $Id: session.c,v 1.85 2011-01-03 23:27:54 tcunha Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott @@ -96,7 +96,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); @@ -163,6 +163,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) diff --git a/tmux.h b/tmux.h index 1a307eac..ac79f84f 100644 --- a/tmux.h +++ b/tmux.h @@ -1,4 +1,4 @@ -/* $Id: tmux.h,v 1.596 2010-12-31 22:12:33 nicm Exp $ */ +/* $Id: tmux.h,v 1.597 2011-01-03 23:27:54 tcunha Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott @@ -1974,6 +1974,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 *,