summaryrefslogtreecommitdiffstats
path: root/osdep
diff options
context:
space:
mode:
authorwm4 <wm4@nowhere>2013-10-28 23:32:57 +0100
committerwm4 <wm4@nowhere>2013-10-28 23:32:57 +0100
commitdceccaf1695a69227947501102977bbac240977b (patch)
tree20f95a8ee09c3575599a30b5b0d06a66c750bc6a /osdep
parente10b362bdb3772bd0634607cfe4d5ef27515777b (diff)
downloadmpv-dceccaf1695a69227947501102977bbac240977b.tar.bz2
mpv-dceccaf1695a69227947501102977bbac240977b.tar.xz
getch2: assume EOF when input file descriptor is invalid
When starting mpv with nohup, file descriptor 0 seems to be invalid for some reason. (I'm not quite sure why it should be... /proc/pid/fd/0 seems to indicate it's just /dev/null, and using /dev/null explicitly shows that it works just fine.) select() will always immediately return, and this causes mpv to burn CPU without reason. Fix this by treating it as EOF when read() returns EBADF. Also add EINVAL to this condition, because it seems like a good idea.
Diffstat (limited to 'osdep')
-rw-r--r--osdep/getch2.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/osdep/getch2.c b/osdep/getch2.c
index 13eb47bc29..8b87e79c76 100644
--- a/osdep/getch2.c
+++ b/osdep/getch2.c
@@ -27,6 +27,7 @@
#include <stdint.h>
#include <string.h>
#include <signal.h>
+#include <errno.h>
#include <sys/ioctl.h>
#ifdef HAVE_TERMIOS
@@ -366,8 +367,10 @@ bool getch2(struct input_ctx *input_ctx)
* happen if the terminal state change done in getch2_enable()
* works.
*/
- if (retval < 1)
- return retval;
+ if (retval == 0)
+ return false;
+ if (retval == -1)
+ return errno != EBADF && errno != EINVAL;
getch2_len += retval;
while (getch2_pos < getch2_len) {