Skip to content
Snippets Groups Projects
Commit f2aa186c authored by David Pursell's avatar David Pursell
Browse files

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
parent 0fdd6632
No related branches found
No related tags found
No related merge requests found
......@@ -477,8 +477,14 @@ 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_.clear();
stderr_sfd_.clear();
}
dead_sfd->reset(-1);
dead_sfd->clear();
}
}
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment