adb: Mask SIGTTIN so that I/O works when backgrounded.
SIGTTIN gets sent to the process when we attempt to read from stdin when we're in the background, which stops the process by default. Mask the signal so that the read returns -1 with errno set to EIO, instead. Change-Id: I4ae626b0670c05a1a05165539b9eed709e83d536
This commit is contained in:
parent
38aee48fc6
commit
8dcdb57daf
|
@ -39,6 +39,7 @@
|
|||
#include <base/strings.h>
|
||||
|
||||
#if !defined(_WIN32)
|
||||
#include <signal.h>
|
||||
#include <termios.h>
|
||||
#include <unistd.h>
|
||||
#endif
|
||||
|
@ -440,6 +441,14 @@ static void* stdin_read_thread(void* x) {
|
|||
|
||||
adb_thread_setname("stdin reader");
|
||||
|
||||
#ifndef __WIN32
|
||||
// Mask SIGTTIN in case we're in a backgrounded process
|
||||
sigset_t sigset;
|
||||
sigemptyset(&sigset);
|
||||
sigaddset(&sigset, SIGTTIN);
|
||||
pthread_sigmask(SIG_BLOCK, &sigset, nullptr);
|
||||
#endif
|
||||
|
||||
char raw_buffer[1024];
|
||||
char* buffer_ptr = raw_buffer;
|
||||
size_t buffer_size = sizeof(raw_buffer);
|
||||
|
|
Loading…
Reference in New Issue