diff options
author | Tiago Cunha <tcunha@gmx.com> | 2009-11-08 23:12:35 +0000 |
---|---|---|
committer | Tiago Cunha <tcunha@gmx.com> | 2009-11-08 23:12:35 +0000 |
commit | 915031b0495591fcc53a4edbda14a33815218fdd (patch) | |
tree | e109c97750cc81b9be4a7e6e8611e0dfaa4bc1de | |
parent | 02438c01b72f0cf1c22d45d84d7dea808cc548d1 (diff) | |
download | rtmux-915031b0495591fcc53a4edbda14a33815218fdd.tar.gz rtmux-915031b0495591fcc53a4edbda14a33815218fdd.tar.bz2 rtmux-915031b0495591fcc53a4edbda14a33815218fdd.zip |
Sync OpenBSD patchset 505:
Move status timer check into the global once-per-second timer, this could maybe
be done better but one every second is better than once every 50 ms.
-rw-r--r-- | server-client.c | 82 | ||||
-rw-r--r-- | server.c | 4 | ||||
-rw-r--r-- | tmux.h | 3 |
3 files changed, 46 insertions, 43 deletions
diff --git a/server-client.c b/server-client.c index 70079160..862cd26f 100644 --- a/server-client.c +++ b/server-client.c @@ -1,4 +1,4 @@ -/* $Id: server-client.c,v 1.16 2009-11-08 23:11:23 tcunha Exp $ */ +/* $Id: server-client.c,v 1.17 2009-11-08 23:12:35 tcunha Exp $ */ /* * Copyright (c) 2009 Nicholas Marriott <nicm@users.sourceforge.net> @@ -29,7 +29,6 @@ void server_client_handle_data(struct client *); void server_client_check_redraw(struct client *); void server_client_set_title(struct client *); -void server_client_check_timers(struct client *); int server_client_msg_dispatch(struct client *); void server_client_msg_command(struct client *, struct msg_command_data *); @@ -183,6 +182,45 @@ client_lost: server_client_lost(c); } +/* Handle client status timer. */ +void +server_client_status_timer(void) +{ + struct client *c; + struct session *s; + struct job *job; + struct timeval tv; + u_int i, interval; + + if (gettimeofday(&tv, NULL) != 0) + fatal("gettimeofday failed"); + + for (i = 0; i < ARRAY_LENGTH(&clients); i++) { + c = ARRAY_ITEM(&clients, i); + if (c == NULL || c->session == NULL) + continue; + if (c->message_string != NULL || c->prompt_string != NULL) { + /* + * Don't need timed redraw for messages/prompts so bail + * now. The status timer isn't reset when they are + * redrawn anyway. + */ + continue; + } + s = c->session; + + if (!options_get_number(&s->options, "status")) + continue; + interval = options_get_number(&s->options, "status-interval"); + + if (tv.tv_sec - c->status_timer.tv_sec >= interval) { + RB_FOREACH(job, jobs, &c->status_jobs) + job_run(job); + c->flags |= CLIENT_STATUS; + } + } +} + /* Client functions that need to happen every loop. */ void server_client_loop(void) @@ -198,10 +236,8 @@ server_client_loop(void) continue; server_client_handle_data(c); - if (c->session != NULL) { - server_client_check_timers(c); + if (c->session != NULL) server_client_check_redraw(c); - } } /* @@ -438,42 +474,6 @@ server_client_set_title(struct client *c) xfree(title); } -/* Check client timers. */ -void -server_client_check_timers(struct client *c) -{ - struct session *s = c->session; - struct job *job; - struct timeval tv; - u_int interval; - - if (gettimeofday(&tv, NULL) != 0) - fatal("gettimeofday failed"); - - if (c->message_string != NULL || c->prompt_string != NULL) { - /* - * Don't need timed redraw for messages/prompts so bail now. - * The status timer isn't reset when they are redrawn anyway. - */ - return; - - } - if (!options_get_number(&s->options, "status")) - return; - - /* Check timer; resolution is only a second so don't be too clever. */ - interval = options_get_number(&s->options, "status-interval"); - if (interval == 0) - return; - if (tv.tv_sec < c->status_timer.tv_sec || - ((u_int) tv.tv_sec) - c->status_timer.tv_sec >= interval) { - /* Run the jobs for this client and schedule for redraw. */ - RB_FOREACH(job, jobs, &c->status_jobs) - job_run(job); - c->flags |= CLIENT_STATUS; - } -} - /* Dispatch message from client. */ int server_client_msg_dispatch(struct client *c) @@ -1,4 +1,4 @@ -/* $Id: server.c,v 1.222 2009-11-08 23:09:36 tcunha Exp $ */ +/* $Id: server.c,v 1.223 2009-11-08 23:12:35 tcunha Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net> @@ -524,6 +524,8 @@ server_second_callback(unused int fd, unused short events, unused void *arg) } } + server_client_status_timer(); + evtimer_del(&server_ev_second); memset(&tv, 0, sizeof tv); tv.tv_sec = 1; @@ -1,4 +1,4 @@ -/* $Id: tmux.h,v 1.504 2009-11-08 23:11:23 tcunha Exp $ */ +/* $Id: tmux.h,v 1.505 2009-11-08 23:12:35 tcunha Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net> @@ -1564,6 +1564,7 @@ void server_signal_clear(void); void server_client_create(int); void server_client_lost(struct client *); void server_client_callback(int, short, void *); +void server_client_status_timer(void); void server_client_loop(void); /* server-window.c */ |