=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/tmux/server-client.c,v retrieving revision 1.48 retrieving revision 1.49 diff -c -r1.48 -r1.49 *** src/usr.bin/tmux/server-client.c 2011/01/03 23:35:21 1.48 --- src/usr.bin/tmux/server-client.c 2011/01/08 01:52:36 1.49 *************** *** 1,4 **** ! /* $OpenBSD: server-client.c,v 1.48 2011/01/03 23:35:21 nicm Exp $ */ /* * Copyright (c) 2009 Nicholas Marriott --- 1,4 ---- ! /* $OpenBSD: server-client.c,v 1.49 2011/01/08 01:52:36 nicm Exp $ */ /* * Copyright (c) 2009 Nicholas Marriott *************** *** 53,65 **** 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"); c = xcalloc(1, sizeof *c); c->references = 0; --- 53,61 ---- server_client_create(int fd) { struct client *c; u_int i; ! setblocking(fd, 0); c = xcalloc(1, sizeof *c); c->references = 0; *************** *** 124,139 **** if (c->flags & CLIENT_TERMINAL) tty_free(&c->tty); ! if (c->stdin_fd != -1) close(c->stdin_fd); if (c->stdin_event != NULL) bufferevent_free(c->stdin_event); ! if (c->stdout_fd != -1) close(c->stdout_fd); if (c->stdout_event != NULL) bufferevent_free(c->stdout_event); ! if (c->stderr_fd != -1) close(c->stderr_fd); if (c->stderr_event != NULL) bufferevent_free(c->stderr_event); --- 120,141 ---- if (c->flags & CLIENT_TERMINAL) tty_free(&c->tty); ! 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) { ! setblocking(c->stdout_fd, 1); close(c->stdout_fd); + } if (c->stdout_event != NULL) bufferevent_free(c->stdout_event); ! 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,637 **** --- 634,640 ---- return; bufferevent_disable(c->stdin_event, EV_READ|EV_WRITE); + setblocking(c->stdin_fd, 1); close(c->stdin_fd); c->stdin_fd = -1; *************** *** 647,652 **** --- 650,656 ---- 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,664 **** --- 663,669 ---- 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,678 **** 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); --- 677,682 ---- *************** *** 712,721 **** 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); - server_client_msg_identify(c, &identifydata, imsg.fd); break; case MSG_STDOUT: --- 716,723 ---- NULL, NULL, server_client_in_callback, c); if (c->stdin_event == NULL) fatalx("failed to create stdin event"); + setblocking(c->stdin_fd, 0); server_client_msg_identify(c, &identifydata, imsg.fd); break; case MSG_STDOUT: *************** *** 729,737 **** NULL, NULL, server_client_out_callback, c); if (c->stdout_event == NULL) fatalx("failed to create stdout event"); - 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) --- 731,738 ---- NULL, NULL, server_client_out_callback, c); if (c->stdout_event == NULL) fatalx("failed to create stdout event"); + setblocking(c->stdout_fd, 0); break; case MSG_STDERR: if (datalen != 0) *************** *** 744,752 **** NULL, NULL, server_client_err_callback, c); if (c->stderr_event == NULL) fatalx("failed to create stderr event"); - 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) --- 745,752 ---- NULL, NULL, server_client_err_callback, c); if (c->stderr_event == NULL) fatalx("failed to create stderr event"); + setblocking(c->stderr_fd, 0); break; case MSG_RESIZE: if (datalen != 0)