From 5289da29ba2fdf15413ec94fa7f2838469abccae Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Tue, 3 Nov 2009 20:29:47 +0000 Subject: [PATCH] Change session and client activity and creation time members to have more meaningful names. Also, remove the code to try and update the session activity time for the command client when a command message is received as is pointless because it des not have a session. --- cmd-list-sessions.c | 2 +- cmd-server-info.c | 2 +- cmd.c | 8 ++++---- server-client.c | 35 ++++++++++++++++++----------------- server.c | 10 ++++++---- session.c | 4 ++-- tmux.h | 8 +++++--- 7 files changed, 37 insertions(+), 32 deletions(-) diff --git a/cmd-list-sessions.c b/cmd-list-sessions.c index cfa1433b..908278d5 100644 --- a/cmd-list-sessions.c +++ b/cmd-list-sessions.c @@ -61,7 +61,7 @@ cmd_list_sessions_exec(unused struct cmd *self, struct cmd_ctx *ctx) xsnprintf(tmp, sizeof tmp, " (group %u)", idx); } - t = s->tv.tv_sec; + t = s->creation_time.tv_sec; tim = ctime(&t); *strchr(tim, '\n') = '\0'; diff --git a/cmd-server-info.c b/cmd-server-info.c index 4107527b..4bd6b67f 100644 --- a/cmd-server-info.c +++ b/cmd-server-info.c @@ -105,7 +105,7 @@ cmd_server_info_exec(unused struct cmd *self, struct cmd_ctx *ctx) if (s == NULL) continue; - t = s->tv.tv_sec; + t = s->creation_time.tv_sec; tim = ctime(&t); *strchr(tim, '\n') = '\0'; diff --git a/cmd.c b/cmd.c index 7ce88f47..ee713a38 100644 --- a/cmd.c +++ b/cmd.c @@ -362,9 +362,9 @@ cmd_newest_session(struct sessions *ss) if ((s = ARRAY_ITEM(ss, i)) == NULL) continue; - if (tv == NULL || timercmp(&s->tv, tv, >)) { + if (tv == NULL || timercmp(&s->creation_time, tv, >)) { snewest = s; - tv = &s->tv; + tv = &s->creation_time; } } @@ -386,9 +386,9 @@ cmd_newest_client(void) if (c->session == NULL) continue; - if (tv == NULL || timercmp(&c->tv, tv, >)) { + if (tv == NULL || timercmp(&c->creation_time, tv, >)) { cnewest = c; - tv = &c->tv; + tv = &c->creation_time; } } diff --git a/server-client.c b/server-client.c index c1e3bec8..a337c6b2 100644 --- a/server-client.c +++ b/server-client.c @@ -61,7 +61,7 @@ server_client_create(int fd) c->references = 0; imsg_init(&c->ibuf, fd); - if (gettimeofday(&c->tv, NULL) != 0) + if (gettimeofday(&c->creation_time, NULL) != 0) fatal("gettimeofday failed"); ARRAY_INIT(&c->prompt_hdata); @@ -261,18 +261,19 @@ server_client_handle_data(struct client *c) struct window_pane *wp; struct screen *s; struct options *oo; - struct timeval tv; + struct timeval tv_add, tv_now; struct key_binding *bd; struct keylist *keylist; struct mouse_event mouse; int key, status, xtimeout, mode, isprefix; u_int i; + /* Check and update repeat flag. */ + if (gettimeofday(&tv_now, NULL) != 0) + fatal("gettimeofday failed"); xtimeout = options_get_number(&c->session->options, "repeat-time"); if (xtimeout != 0 && c->flags & CLIENT_REPEAT) { - if (gettimeofday(&tv, NULL) != 0) - fatal("gettimeofday failed"); - if (timercmp(&tv, &c->repeat_timer, >)) + if (timercmp(&tv_now, &c->repeat_timer, >)) c->flags &= ~(CLIENT_PREFIX|CLIENT_REPEAT); } @@ -281,12 +282,14 @@ server_client_handle_data(struct client *c) while (tty_keys_next(&c->tty, &key, &mouse) == 0) { if (c->session == NULL) return; - - c->session->activity = time(NULL); w = c->session->curw->window; wp = w->active; /* could die */ oo = &c->session->options; + /* Update activity timer. */ + memcpy(&c->session->activity_time, + &tv_now, sizeof c->session->activity_time); + /* Special case: number keys jump to pane in identify mode. */ if (c->flags & CLIENT_IDENTIFY && key >= '0' && key <= '9') { wp = window_pane_at_index(w, key - '0'); @@ -364,11 +367,9 @@ server_client_handle_data(struct client *c) if (xtimeout != 0 && bd->can_repeat) { c->flags |= CLIENT_PREFIX|CLIENT_REPEAT; - tv.tv_sec = xtimeout / 1000; - tv.tv_usec = (xtimeout % 1000) * 1000L; - if (gettimeofday(&c->repeat_timer, NULL) != 0) - fatal("gettimeofday failed"); - timeradd(&c->repeat_timer, &tv, &c->repeat_timer); + tv_add.tv_sec = xtimeout / 1000; + tv_add.tv_usec = (xtimeout % 1000) * 1000L; + timeradd(&tv_now, &tv_add, &c->repeat_timer); } /* Dispatch the command. */ @@ -581,11 +582,14 @@ server_client_msg_dispatch(struct client *c) if (!(c->flags & CLIENT_SUSPENDED)) break; c->flags &= ~CLIENT_SUSPENDED; + + if (c->session != NULL && + gettimeofday(&c->session->activity_time, NULL) != 0) + fatal("gettimeofday failed"); + tty_start_tty(&c->tty); server_redraw_client(c); recalculate_sizes(); - if (c->session != NULL) - c->session->activity = time(NULL); break; case MSG_ENVIRON: if (datalen != sizeof environdata) @@ -665,9 +669,6 @@ server_client_msg_command(struct client *c, struct msg_command_data *data) int argc; char **argv, *cause; - if (c->session != NULL) - c->session->activity = time(NULL); - ctx.error = server_client_msg_error; ctx.print = server_client_msg_print; ctx.info = server_client_msg_info; diff --git a/server.c b/server.c index ed551694..1113d4dc 100644 --- a/server.c +++ b/server.c @@ -565,12 +565,13 @@ server_lock_server(void) continue; if (s->flags & SESSION_UNATTACHED) { - s->activity = time(NULL); + if (gettimeofday(&s->activity_time, NULL) != 0) + fatal("gettimeofday failed"); continue; } timeout = options_get_number(&s->options, "lock-after-time"); - if (timeout <= 0 || t <= s->activity + timeout) + if (timeout <= 0 || t <= s->activity_time.tv_sec + timeout) return; /* not timed out */ } @@ -593,12 +594,13 @@ server_lock_sessions(void) continue; if (s->flags & SESSION_UNATTACHED) { - s->activity = time(NULL); + if (gettimeofday(&s->activity_time, NULL) != 0) + fatal("gettimeofday failed"); continue; } timeout = options_get_number(&s->options, "lock-after-time"); - if (timeout > 0 && t > s->activity + timeout) { + if (timeout > 0 && t > s->activity_time.tv_sec + timeout) { server_lock_session(s); recalculate_sizes(); } diff --git a/session.c b/session.c index a477634e..8d22ac77 100644 --- a/session.c +++ b/session.c @@ -126,10 +126,10 @@ session_create(const char *name, const char *cmd, const char *cwd, s = xmalloc(sizeof *s); s->references = 0; s->flags = 0; - s->activity = time(NULL); - if (gettimeofday(&s->tv, NULL) != 0) + if (gettimeofday(&s->creation_time, NULL) != 0) fatal("gettimeofday failed"); + memcpy(&s->activity_time, &s->creation_time, sizeof s->activity_time); s->curw = NULL; TAILQ_INIT(&s->lastw); diff --git a/tmux.h b/tmux.h index 20a1cbb9..62419913 100644 --- a/tmux.h +++ b/tmux.h @@ -922,8 +922,9 @@ TAILQ_HEAD(session_groups, session_group); struct session { char *name; - struct timeval tv; - time_t activity; + + struct timeval creation_time; + struct timeval activity_time; u_int sx; u_int sy; @@ -1061,7 +1062,8 @@ struct mouse_event { /* Client connection. */ struct client { struct imsgbuf ibuf; - struct timeval tv; + + struct timeval creation_time; struct environ environ;