=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/tmux/client.c,v retrieving revision 1.30 retrieving revision 1.31 diff -c -r1.30 -r1.31 *** src/usr.bin/tmux/client.c 2009/11/04 20:50:11 1.30 --- src/usr.bin/tmux/client.c 2009/11/04 22:57:49 1.31 *************** *** 1,4 **** ! /* $OpenBSD: client.c,v 1.30 2009/11/04 20:50:11 nicm Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott --- 1,4 ---- ! /* $OpenBSD: client.c,v 1.31 2009/11/04 22:57:49 nicm Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott *************** *** 41,46 **** --- 41,47 ---- void client_send_identify(int); void client_send_environ(void); void client_write_server(enum msgtype, void *, size_t); + void client_update_event(void); void client_signal(int, short, void *); void client_callback(int, short, void *); int client_dispatch(void); *************** *** 154,165 **** imsg_compose(&client_ibuf, type, PROTOCOL_VERSION, -1, -1, buf, len); } __dead void client_main(void) { struct event ev_sigcont, ev_sigterm, ev_sigwinch; struct sigaction sigact; - short events; logfile("client"); --- 155,178 ---- imsg_compose(&client_ibuf, type, PROTOCOL_VERSION, -1, -1, buf, len); } + void + client_update_event(void) + { + short events; + + event_del(&client_event); + events = EV_READ; + if (client_ibuf.w.queued > 0) + events |= EV_WRITE; + event_set(&client_event, client_ibuf.fd, events, client_callback, NULL); + event_add(&client_event, NULL); + } + __dead void client_main(void) { struct event ev_sigcont, ev_sigterm, ev_sigwinch; struct sigaction sigact; logfile("client"); *************** *** 197,209 **** if (client_dispatch() != 0) goto out; ! /* Set up the client-server socket event. */ ! events = EV_READ; ! if (client_ibuf.w.queued > 0) ! events |= EV_WRITE; ! event_set(&client_event, client_ibuf.fd, events, client_callback, NULL); ! event_add(&client_event, NULL); ! event_dispatch(); out: --- 210,217 ---- if (client_dispatch() != 0) goto out; ! /* Set the event and dispatch. */ ! client_update_event(); event_dispatch(); out: *************** *** 217,223 **** } void ! client_signal(int sig, short events, unused void *data) { struct sigaction sigact; --- 225,231 ---- } void ! client_signal(int sig, unused short events, unused void *data) { struct sigaction sigact; *************** *** 240,251 **** break; } ! event_del(&client_event); ! events = EV_READ; ! if (client_ibuf.w.queued > 0) ! events |= EV_WRITE; ! event_set(&client_event, client_ibuf.fd, events, client_callback, NULL); ! event_add(&client_event, NULL); } void --- 248,254 ---- break; } ! client_update_event(); } void *************** *** 267,279 **** goto lost_server; } ! event_del(&client_event); ! events = EV_READ; ! if (client_ibuf.w.queued > 0) ! events |= EV_WRITE; ! event_set(&client_event, client_ibuf.fd, events, client_callback, NULL); ! event_add(&client_event, NULL); ! return; lost_server: --- 270,276 ---- goto lost_server; } ! client_update_event(); return; lost_server: