summaryrefslogtreecommitdiff
path: root/cmds/installd/utils.cpp
diff options
context:
space:
mode:
author Jiakai Zhang <jiakaiz@google.com> 2022-07-08 11:24:34 +0100
committer Jiakai Zhang <jiakaiz@google.com> 2022-07-08 14:24:32 +0000
commit501af5a844821ef2ad3f89906893640c18ba848c (patch)
tree882b3e60b3bb62821d1d3d5f28dd8fb30deb92eb /cmds/installd/utils.cpp
parent2f47fec948441d9f25fad71e878a21ea25fb5d9e (diff)
installd: Wait indefinitely for the subprocess if pidfd_open fails.
In Android T we introduced a feature in installd, which is to kill the subprocess that times out. This feature is implemented by a syscall pidfd_open, which requires kernel 5.4 or above, so it fails on older kernels, and therefore causes installd unable to invoke dex2oat, etc., making the device unable to do any app compilation. After this change, if pidfd_open fails, installd will wait indefinitely for the subprocess, which is the behavior in Android S. Bug: 238316970 Test: Presubmit Change-Id: I12e492937b876b5b312b3f8eedce6e5d5d2a4a4e
Diffstat (limited to 'cmds/installd/utils.cpp')
-rw-r--r--cmds/installd/utils.cpp4
1 files changed, 2 insertions, 2 deletions
diff --git a/cmds/installd/utils.cpp b/cmds/installd/utils.cpp
index c7bea3f4a9..65b25a495b 100644
--- a/cmds/installd/utils.cpp
+++ b/cmds/installd/utils.cpp
@@ -1182,8 +1182,8 @@ static int wait_child(pid_t pid) {
int wait_child_with_timeout(pid_t pid, int timeout_ms) {
int pidfd = pidfd_open(pid, /*flags=*/0);
if (pidfd < 0) {
- PLOG(ERROR) << "pidfd_open failed for pid " << pid;
- kill(pid, SIGKILL);
+ PLOG(ERROR) << "pidfd_open failed for pid " << pid
+ << ", waiting for child process without timeout";
return wait_child(pid);
}