aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--cmd-list-sessions.c4
-rw-r--r--cmd-server-info.c4
-rw-r--r--cmd.c10
-rw-r--r--server-client.c37
-rw-r--r--server.c12
-rw-r--r--session.c6
-rw-r--r--tmux.h10
7 files changed, 44 insertions, 39 deletions
diff --git a/cmd-list-sessions.c b/cmd-list-sessions.c
index e6be3bbc..95db9b8e 100644
--- a/cmd-list-sessions.c
+++ b/cmd-list-sessions.c
@@ -1,4 +1,4 @@
-/* $Id: cmd-list-sessions.c,v 1.22 2009-10-11 23:38:16 tcunha Exp $ */
+/* $Id: cmd-list-sessions.c,v 1.23 2009-11-04 22:42:31 tcunha Exp $ */
/*
* Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
@@ -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 90c3bf60..3f4bac13 100644
--- a/cmd-server-info.c
+++ b/cmd-server-info.c
@@ -1,4 +1,4 @@
-/* $Id: cmd-server-info.c,v 1.32 2009-11-02 21:38:26 tcunha Exp $ */
+/* $Id: cmd-server-info.c,v 1.33 2009-11-04 22:42:31 tcunha Exp $ */
/*
* Copyright (c) 2008 Nicholas Marriott <nicm@users.sourceforge.net>
@@ -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 0b8e46d6..fd76db3b 100644
--- a/cmd.c
+++ b/cmd.c
@@ -1,4 +1,4 @@
-/* $Id: cmd.c,v 1.127 2009-11-02 21:42:27 tcunha Exp $ */
+/* $Id: cmd.c,v 1.128 2009-11-04 22:42:31 tcunha Exp $ */
/*
* Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
@@ -361,9 +361,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;
}
}
@@ -385,9 +385,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 9acfa4c9..5a4aff18 100644
--- a/server-client.c
+++ b/server-client.c
@@ -1,4 +1,4 @@
-/* $Id: server-client.c,v 1.10 2009-10-28 23:14:15 tcunha Exp $ */
+/* $Id: server-client.c,v 1.11 2009-11-04 22:42:31 tcunha Exp $ */
/*
* Copyright (c) 2009 Nicholas Marriott <nicm@users.sourceforge.net>
@@ -60,7 +60,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);
@@ -260,18 +260,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);
}
@@ -280,12 +281,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');
@@ -363,11 +366,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. */
@@ -580,11 +581,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)
@@ -664,9 +668,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 bea6f5d7..8df12e56 100644
--- a/server.c
+++ b/server.c
@@ -1,4 +1,4 @@
-/* $Id: server.c,v 1.215 2009-11-02 21:39:34 tcunha Exp $ */
+/* $Id: server.c,v 1.216 2009-11-04 22:42:31 tcunha Exp $ */
/*
* Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
@@ -568,12 +568,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 */
}
@@ -596,12 +597,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 e4f5055c..6d78f891 100644
--- a/session.c
+++ b/session.c
@@ -1,4 +1,4 @@
-/* $Id: session.c,v 1.69 2009-10-11 23:38:16 tcunha Exp $ */
+/* $Id: session.c,v 1.70 2009-11-04 22:42:31 tcunha Exp $ */
/*
* Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
@@ -125,10 +125,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 52fd2a65..dcda730b 100644
--- a/tmux.h
+++ b/tmux.h
@@ -1,4 +1,4 @@
-/* $Id: tmux.h,v 1.493 2009-11-04 22:39:20 tcunha Exp $ */
+/* $Id: tmux.h,v 1.494 2009-11-04 22:42:31 tcunha Exp $ */
/*
* Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
@@ -920,8 +920,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;
@@ -1059,7 +1060,8 @@ struct mouse_event {
/* Client connection. */
struct client {
struct imsgbuf ibuf;
- struct timeval tv;
+
+ struct timeval creation_time;
struct environ environ;