From c3e46833c22f1e9ca7de55105881131d00129707 Mon Sep 17 00:00:00 2001 From: Uoti Urpala Date: Sun, 17 Jul 2011 05:48:48 +0300 Subject: [PATCH] input: don't make fd 0 nonblocking Setting O_NONBLOCK on a file descriptor also affects all other fds that share the same underlying open file description, and in case of stdin such sharing is likely. Making stdin nonblocking can also make stdout nonblocking (they may be the same connection to a terminal), and it can also affect other processes (in "program1 | program2", the shell may give the same terminal connection to program1 as stdin and to program2 as stdout, thus program1 making its stdin nonblocking also turns program2's stdout nonblocking). To avoid these problems stop making fd 0 nonblocking. After the previous commit this should no longer cause problems as long as select() does not spuriously report the fd as readable. --- mplayer.c | 5 ----- osdep/getch2.c | 5 ----- 2 files changed, 10 deletions(-) diff --git a/mplayer.c b/mplayer.c index c10cb61223..a9175eb28c 100644 --- a/mplayer.c +++ b/mplayer.c @@ -4080,11 +4080,6 @@ current_module = "init_input"; mpctx->input = mp_input_init(&opts->input); mpctx->key_fifo = mp_fifo_create(mpctx->input, opts); if(slave_mode) { -#if USE_FD0_CMD_SELECT - int flags = fcntl(0, F_GETFL); - if (flags != -1) - fcntl(0, F_SETFL, flags | O_NONBLOCK); -#endif mp_input_add_cmd_fd(mpctx->input, 0,USE_FD0_CMD_SELECT,MP_INPUT_SLAVE_CMD_FUNC,NULL); } else if (opts->consolecontrols) diff --git a/osdep/getch2.c b/osdep/getch2.c index 7ddcb3f378..96fe45729a 100644 --- a/osdep/getch2.c +++ b/osdep/getch2.c @@ -282,11 +282,6 @@ struct termios tio_new; tio_new.c_cc[VTIME] = 0; tcsetattr(0,TCSANOW,&tio_new); #endif - /* Setting VMIN above should already make terminal non-blocking; but - * that won't work if stdin is not a real terminal. */ - int flags = fcntl(0, F_GETFL); - if (flags != -1) - fcntl(0, F_SETFL, flags | O_NONBLOCK); getch2_status=1; }