adbd: properly close subprocess pipes on Ctrl+C.
When non-interactive sessions exit via Ctrl+C, adbd sends SIGHUP
to the child process to let it know to exit. However, adbd was not
closing the pipes to the child process, so if the subprocess ignored
SIGHUP and continued writing it could fill up the pipe and block
forever while adbd waits for it to exit.
This CL adds the necessary calls to close the subprocess pipe after
sending SIGHUP.
Bug: 28981563
Change-Id: I318e322e563241052648361172f4859c297837fb
(cherry picked from commit f2aa186c7b
)
This commit is contained in:
parent
8c4076295e
commit
a6d5661140
|
@ -479,6 +479,12 @@ void Subprocess::PassDataStreams() {
|
|||
// and only fall back on this for unexpected closures.
|
||||
D("protocol FD died, sending SIGHUP to pid %d", pid_);
|
||||
kill(pid_, SIGHUP);
|
||||
|
||||
// We also need to close the pipes connected to the child process
|
||||
// so that if it ignores SIGHUP and continues to write data it
|
||||
// won't fill up the pipe and block.
|
||||
stdinout_sfd_.Reset();
|
||||
stderr_sfd_.Reset();
|
||||
}
|
||||
dead_sfd->Reset();
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue