diff options
author | Tiago Cunha <tcunha@gmx.com> | 2009-10-28 23:14:15 +0000 |
---|---|---|
committer | Tiago Cunha <tcunha@gmx.com> | 2009-10-28 23:14:15 +0000 |
commit | f4514f5c603ccffb4741e1009624537b06658a3b (patch) | |
tree | e4fe56c166edecff23b8b679630e6da6091e710d /server-window.c | |
parent | a5acabd9230eb70e802ece13542ec647c52b7ee2 (diff) | |
download | rtmux-f4514f5c603ccffb4741e1009624537b06658a3b.tar.gz rtmux-f4514f5c603ccffb4741e1009624537b06658a3b.tar.bz2 rtmux-f4514f5c603ccffb4741e1009624537b06658a3b.zip |
Sync OpenBSD patchset 468:
Move the poll registration functions into the server-*.c files.
Diffstat (limited to 'server-window.c')
-rw-r--r-- | server-window.c | 35 |
1 files changed, 34 insertions, 1 deletions
diff --git a/server-window.c b/server-window.c index fe554afd..0c57b990 100644 --- a/server-window.c +++ b/server-window.c @@ -1,4 +1,4 @@ -/* $Id: server-window.c,v 1.1 2009-10-23 17:49:47 tcunha Exp $ */ +/* $Id: server-window.c,v 1.2 2009-10-28 23:14:15 tcunha Exp $ */ /* * Copyright (c) 2009 Nicholas Marriott <nicm@users.sourceforge.net> @@ -28,6 +28,39 @@ int server_window_check_content( struct session *, struct window *, struct window_pane *); void server_window_check_alive(struct window *); +/* Register windows for poll. */ +void +server_window_prepare(void) +{ + struct window *w; + struct window_pane *wp; + u_int i; + int events; + + for (i = 0; i < ARRAY_LENGTH(&windows); i++) { + if ((w = ARRAY_ITEM(&windows, i)) == NULL) + continue; + + TAILQ_FOREACH(wp, &w->panes, entry) { + if (wp->fd == -1) + continue; + events = POLLIN; + if (BUFFER_USED(wp->out) > 0) + events |= POLLOUT; + server_poll_add( + wp->fd, events, server_window_callback, wp); + + if (wp->pipe_fd == -1) + continue; + events = 0; + if (BUFFER_USED(wp->pipe_buf) > 0) + events |= POLLOUT; + server_poll_add( + wp->pipe_fd, events, server_window_callback, wp); + } + } +} + /* Process a single window pane event. */ void server_window_callback(int fd, int events, void *data) |