=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/tmux/server-client.c,v retrieving revision 1.8 retrieving revision 1.9 diff -u -r1.8 -r1.9 --- src/usr.bin/tmux/server-client.c 2009/10/26 21:42:04 1.8 +++ src/usr.bin/tmux/server-client.c 2009/10/27 13:03:33 1.9 @@ -1,4 +1,4 @@ -/* $OpenBSD: server-client.c,v 1.8 2009/10/26 21:42:04 deraadt Exp $ */ +/* $OpenBSD: server-client.c,v 1.9 2009/10/27 13:03:33 nicm Exp $ */ /* * Copyright (c) 2009 Nicholas Marriott @@ -145,6 +145,36 @@ c->flags |= CLIENT_DEAD; recalculate_sizes(); +} + +/* Register clients for poll. */ +void +server_client_prepare(void) +{ + struct client *c; + u_int i; + int events; + + for (i = 0; i < ARRAY_LENGTH(&clients); i++) { + if ((c = ARRAY_ITEM(&clients, i)) == NULL) + continue; + + events = 0; + if (!(c->flags & CLIENT_BAD)) + events |= POLLIN; + if (c->ibuf.w.queued > 0) + events |= POLLOUT; + server_poll_add(c->ibuf.fd, events, server_client_callback, c); + + if (c->tty.fd == -1) + continue; + if (c->flags & CLIENT_SUSPENDED || c->session == NULL) + continue; + events = POLLIN; + if (BUFFER_USED(c->tty.out) > 0) + events |= POLLOUT; + server_poll_add(c->tty.fd, events, server_client_callback, c); + } } /* Process a single client event. */