lmkd: Fix kill failure handling

When lmkd fails to kill it should log the error, remove the process record
and exit immediately.

Bug: 74119935
Test: lmkd_unit_test
Change-Id: I26b0fd873eeed325f7dd56097ec31abc0d63f3a1
Signed-off-by: Suren Baghdasaryan <surenb@google.com>
This commit is contained in:
Suren Baghdasaryan 2019-09-04 16:44:47 -07:00
parent 970a26aeb7
commit c2e05b6ffa
1 changed files with 19 additions and 18 deletions

15
lmkd.c
View File

@ -1793,6 +1793,14 @@ static int kill_one_process(struct proc* procp, int min_oom_score, const char *r
/* CAP_KILL required */ /* CAP_KILL required */
r = kill(pid, SIGKILL); r = kill(pid, SIGKILL);
TRACE_KILL_END();
if (r) {
ALOGE("kill(%d): errno=%d", pid, errno);
/* Delete process record even when we fail to kill so that we don't get stuck on it */
goto out;
}
set_process_group_and_prio(pid, SP_FOREGROUND, ANDROID_PRIORITY_HIGHEST); set_process_group_and_prio(pid, SP_FOREGROUND, ANDROID_PRIORITY_HIGHEST);
inc_killcnt(procp->oomadj); inc_killcnt(procp->oomadj);
@ -1804,14 +1812,8 @@ static int kill_one_process(struct proc* procp, int min_oom_score, const char *r
uid, procp->oomadj, tasksize * page_k); uid, procp->oomadj, tasksize * page_k);
} }
TRACE_KILL_END();
last_killed_pid = pid; last_killed_pid = pid;
if (r) {
ALOGE("kill(%d): errno=%d", pid, errno);
goto out;
} else {
#ifdef LMKD_LOG_STATS #ifdef LMKD_LOG_STATS
if (memory_stat_parse_result == 0) { if (memory_stat_parse_result == 0) {
stats_write_lmk_kill_occurred(log_ctx, LMK_KILL_OCCURRED, uid, taskname, stats_write_lmk_kill_occurred(log_ctx, LMK_KILL_OCCURRED, uid, taskname,
@ -1825,7 +1827,6 @@ static int kill_one_process(struct proc* procp, int min_oom_score, const char *r
} }
#endif #endif
result = tasksize; result = tasksize;
}
out: out:
/* /*