mirror of https://github.com/mpv-player/mpv
input: make slave command file descriptors nonblocking
Neither fd 0 slave input (-slave) nor additional opened fds (-input file=X) were set to nonblocking mode as they should have been. Fix. Also rename the horribly generic USE_SELECT #define used for a specific slave input detail.
This commit is contained in:
parent
0fff1380b1
commit
618f760866
|
@ -1838,12 +1838,12 @@ struct input_ctx *mp_input_init(struct input_conf *input_conf)
|
|||
|
||||
if (input_conf->in_file) {
|
||||
struct stat st;
|
||||
int mode = O_RDONLY;
|
||||
int mode = O_RDONLY | O_NONBLOCK;
|
||||
// Use RDWR for FIFOs to ensure they stay open over multiple accesses.
|
||||
// Note that on Windows stat may fail for named pipes,
|
||||
// but due to how the API works, using RDONLY should be ok.
|
||||
if (stat(input_conf->in_file, &st) == 0 && S_ISFIFO(st.st_mode))
|
||||
mode = O_RDWR;
|
||||
mode = O_RDWR | O_NONBLOCK;
|
||||
int in_file_fd = open(input_conf->in_file, mode);
|
||||
if (in_file_fd >= 0)
|
||||
mp_input_add_cmd_fd(ictx, in_file_fd, 1, NULL,
|
||||
|
|
10
mplayer.c
10
mplayer.c
|
@ -4030,8 +4030,14 @@ if(!codecs_file || !parse_codec_cfg(codecs_file)){
|
|||
current_module = "init_input";
|
||||
mpctx->input = mp_input_init(&opts->input);
|
||||
mp_input_add_key_fd(mpctx->input, -1,0,mplayer_get_key,NULL, mpctx->key_fifo);
|
||||
if(slave_mode)
|
||||
mp_input_add_cmd_fd(mpctx->input, 0,USE_SELECT,MP_INPUT_SLAVE_CMD_FUNC,NULL);
|
||||
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)
|
||||
mp_input_add_key_fd(mpctx->input, 0, 1, read_keys, NULL, mpctx->key_fifo);
|
||||
// Set the libstream interrupt callback
|
||||
|
|
|
@ -61,10 +61,10 @@ char *get_term_charset(void);
|
|||
#if defined(__MINGW32__) || defined(__OS2__)
|
||||
/* slave cmd function for Windows and OS/2 */
|
||||
int mp_input_slave_cmd_func(int fd,char* dest,int size);
|
||||
#define USE_SELECT 0
|
||||
#define USE_FD0_CMD_SELECT 0
|
||||
#define MP_INPUT_SLAVE_CMD_FUNC mp_input_slave_cmd_func
|
||||
#else
|
||||
#define USE_SELECT 1
|
||||
#define USE_FD0_CMD_SELECT 1
|
||||
#define MP_INPUT_SLAVE_CMD_FUNC NULL
|
||||
#endif
|
||||
|
||||
|
|
Loading…
Reference in New Issue