diff options
Diffstat (limited to 'arch/um/os-Linux/sigio.c')
-rw-r--r-- | arch/um/os-Linux/sigio.c | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/arch/um/os-Linux/sigio.c b/arch/um/os-Linux/sigio.c index 00e9388e947a..0d2422a7d72c 100644 --- a/arch/um/os-Linux/sigio.c +++ b/arch/um/os-Linux/sigio.c | |||
@@ -233,7 +233,7 @@ static struct pollfd *setup_initial_poll(int fd) | |||
233 | return p; | 233 | return p; |
234 | } | 234 | } |
235 | 235 | ||
236 | void write_sigio_workaround(void) | 236 | static void write_sigio_workaround(void) |
237 | { | 237 | { |
238 | unsigned long stack; | 238 | unsigned long stack; |
239 | struct pollfd *p; | 239 | struct pollfd *p; |
@@ -314,6 +314,18 @@ out_close1: | |||
314 | close(l_write_sigio_fds[1]); | 314 | close(l_write_sigio_fds[1]); |
315 | } | 315 | } |
316 | 316 | ||
317 | void maybe_sigio_broken(int fd, int read) | ||
318 | { | ||
319 | if(!isatty(fd)) | ||
320 | return; | ||
321 | |||
322 | if((read || pty_output_sigio) && (!read || pty_close_sigio)) | ||
323 | return; | ||
324 | |||
325 | write_sigio_workaround(); | ||
326 | add_sigio_fd(fd, read); | ||
327 | } | ||
328 | |||
317 | void sigio_cleanup(void) | 329 | void sigio_cleanup(void) |
318 | { | 330 | { |
319 | if(write_sigio_pid != -1){ | 331 | if(write_sigio_pid != -1){ |