summaryrefslogtreecommitdiffstats
path: root/lmkd
diff options
context:
space:
mode:
authorColin Cross <ccross@android.com>2014-07-11 17:16:56 -0700
committerColin Cross <ccross@android.com>2014-07-14 17:41:17 -0700
commitf8857cc24a54393f904fc4918bd5c2b6adf672e2 (patch)
tree8c48ac920f65bfbc447de19a71c9b5ed0313fc1c /lmkd
parent16b0946da1745877311562b8cbce08584c6a1b37 (diff)
downloadsystem_core-f8857cc24a54393f904fc4918bd5c2b6adf672e2.zip
system_core-f8857cc24a54393f904fc4918bd5c2b6adf672e2.tar.gz
system_core-f8857cc24a54393f904fc4918bd5c2b6adf672e2.tar.bz2
lmkd: kill a process if zoneinfo can't be read
Opening /proc/zoneinfo may return -ENOMEM under memory pressure, assume something needs to be killed if that happens. Bug: 16236289 Change-Id: I25aab09f4c3f2b9e176eaaeca94fd6bd790dad4e
Diffstat (limited to 'lmkd')
-rw-r--r--lmkd/lmkd.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/lmkd/lmkd.c b/lmkd/lmkd.c
index 2362cbf..a534a24 100644
--- a/lmkd/lmkd.c
+++ b/lmkd/lmkd.c
@@ -660,8 +660,10 @@ static void mp_event(uint32_t events __unused) {
if (time(NULL) - kill_lasttime < KILL_TIMEOUT)
return;
- if (zoneinfo_parse(&mi) < 0)
- return;
+ while (zoneinfo_parse(&mi) < 0) {
+ // Failed to read /proc/zoneinfo, assume ENOMEM and kill something
+ find_and_kill_process(0, 0, true);
+ }
other_free = mi.nr_free_pages - mi.totalreserve_pages;
other_file = mi.nr_file_pages - mi.nr_shmem;