diff --git a/adb/shell_service.cpp b/adb/shell_service.cpp index ce107084cb533a2de6d8266cf143286557f48f4f..f58af9f49a4ea2b64327bf0779165ef94bc9655f 100644 --- a/adb/shell_service.cpp +++ b/adb/shell_service.cpp @@ -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(); }