summaryrefslogtreecommitdiffstats
path: root/libprocessgroup
diff options
context:
space:
mode:
authorYusuke Sato <yusukes@google.com>2015-06-16 13:51:14 -0700
committerYusuke Sato <yusukes@google.com>2015-06-16 13:59:32 -0700
commitd50393057a6551c3bb498ed3a3bb7bd9eeb48225 (patch)
tree6d68941cafdecaef89037b6328e81789a651c34b /libprocessgroup
parentd5600fd40fac5e90532ea08e22940965cfdd7710 (diff)
downloadsystem_core-d50393057a6551c3bb498ed3a3bb7bd9eeb48225.tar.gz
system_core-d50393057a6551c3bb498ed3a3bb7bd9eeb48225.tar.bz2
system_core-d50393057a6551c3bb498ed3a3bb7bd9eeb48225.zip
processgroup: change the polling interval for killProcessGroup()
to make the function faster on average. Since killing a process takes about 40-60ms on a recent device, the previous logic tends to sleep too long. This CL does not significantly change the total timeout (old code: 204ms, new code: 200ms). Bug: 21813611 Change-Id: Ica44b2437ccccaebadcf585d7a09d993ce71a499
Diffstat (limited to 'libprocessgroup')
-rw-r--r--libprocessgroup/processgroup.cpp7
1 files changed, 4 insertions, 3 deletions
diff --git a/libprocessgroup/processgroup.cpp b/libprocessgroup/processgroup.cpp
index a80965fd0..ad0500dab 100644
--- a/libprocessgroup/processgroup.cpp
+++ b/libprocessgroup/processgroup.cpp
@@ -252,14 +252,15 @@ static int killProcessGroupOnce(uid_t uid, int initialPid, int signal)
int killProcessGroup(uid_t uid, int initialPid, int signal)
{
int processes;
- int sleep_us = 100;
+ const int sleep_us = 5 * 1000; // 5ms
int64_t startTime = android::uptimeMillis();
+ int retry = 40;
while ((processes = killProcessGroupOnce(uid, initialPid, signal)) > 0) {
SLOGV("killed %d processes for processgroup %d\n", processes, initialPid);
- if (sleep_us < 128000) {
+ if (retry > 0) {
usleep(sleep_us);
- sleep_us *= 2;
+ --retry;
} else {
SLOGE("failed to kill %d processes for processgroup %d\n",
processes, initialPid);