diff options
Diffstat (limited to 'usr.bin/tmux/server-client.c')
-rw-r--r-- | usr.bin/tmux/server-client.c | 34 |
1 files changed, 17 insertions, 17 deletions
diff --git a/usr.bin/tmux/server-client.c b/usr.bin/tmux/server-client.c index 3bbb12a231e..4fe8de6fa84 100644 --- a/usr.bin/tmux/server-client.c +++ b/usr.bin/tmux/server-client.c @@ -1,4 +1,4 @@ -/* $OpenBSD: server-client.c,v 1.48 2011/01/03 23:35:21 nicm Exp $ */ +/* $OpenBSD: server-client.c,v 1.49 2011/01/08 01:52:36 nicm Exp $ */ /* * Copyright (c) 2009 Nicholas Marriott <nicm@users.sourceforge.net> @@ -53,13 +53,9 @@ void server_client_create(int fd) { struct client *c; - int mode; u_int i; - if ((mode = fcntl(fd, F_GETFL)) == -1) - fatal("fcntl failed"); - if (fcntl(fd, F_SETFL, mode|O_NONBLOCK) == -1) - fatal("fcntl failed"); + setblocking(fd, 0); c = xcalloc(1, sizeof *c); c->references = 0; @@ -124,16 +120,22 @@ server_client_lost(struct client *c) if (c->flags & CLIENT_TERMINAL) tty_free(&c->tty); - if (c->stdin_fd != -1) + if (c->stdin_fd != -1) { + setblocking(c->stdin_fd, 1); close(c->stdin_fd); + } if (c->stdin_event != NULL) bufferevent_free(c->stdin_event); - if (c->stdout_fd != -1) + if (c->stdout_fd != -1) { + setblocking(c->stdout_fd, 1); close(c->stdout_fd); + } if (c->stdout_event != NULL) bufferevent_free(c->stdout_event); - if (c->stderr_fd != -1) + if (c->stderr_fd != -1) { + setblocking(c->stderr_fd, 1); close(c->stderr_fd); + } if (c->stderr_event != NULL) bufferevent_free(c->stderr_event); @@ -632,6 +634,7 @@ server_client_in_callback( return; bufferevent_disable(c->stdin_event, EV_READ|EV_WRITE); + setblocking(c->stdin_fd, 1); close(c->stdin_fd); c->stdin_fd = -1; @@ -647,6 +650,7 @@ server_client_out_callback( struct client *c = data; bufferevent_disable(c->stdout_event, EV_READ|EV_WRITE); + setblocking(c->stdout_fd, 1); close(c->stdout_fd); c->stdout_fd = -1; } @@ -659,6 +663,7 @@ server_client_err_callback( struct client *c = data; bufferevent_disable(c->stderr_event, EV_READ|EV_WRITE); + setblocking(c->stderr_fd, 1); close(c->stderr_fd); c->stderr_fd = -1; } @@ -672,7 +677,6 @@ server_client_msg_dispatch(struct client *c) struct msg_identify_data identifydata; struct msg_environ_data environdata; ssize_t n, datalen; - int mode; if ((n = imsg_read(&c->ibuf)) == -1 || n == 0) return (-1); @@ -712,9 +716,7 @@ server_client_msg_dispatch(struct client *c) NULL, NULL, server_client_in_callback, c); if (c->stdin_event == NULL) fatalx("failed to create stdin event"); - - if ((mode = fcntl(c->stdin_fd, F_GETFL)) != -1) - fcntl(c->stdin_fd, F_SETFL, mode|O_NONBLOCK); + setblocking(c->stdin_fd, 0); server_client_msg_identify(c, &identifydata, imsg.fd); break; @@ -729,9 +731,8 @@ server_client_msg_dispatch(struct client *c) NULL, NULL, server_client_out_callback, c); if (c->stdout_event == NULL) fatalx("failed to create stdout event"); + setblocking(c->stdout_fd, 0); - if ((mode = fcntl(c->stdout_fd, F_GETFL)) != -1) - fcntl(c->stdout_fd, F_SETFL, mode|O_NONBLOCK); break; case MSG_STDERR: if (datalen != 0) @@ -744,9 +745,8 @@ server_client_msg_dispatch(struct client *c) NULL, NULL, server_client_err_callback, c); if (c->stderr_event == NULL) fatalx("failed to create stderr event"); + setblocking(c->stderr_fd, 0); - if ((mode = fcntl(c->stderr_fd, F_GETFL)) != -1) - fcntl(c->stderr_fd, F_SETFL, mode|O_NONBLOCK); break; case MSG_RESIZE: if (datalen != 0) |