Request lmkd to purge its list of pids after establishing connection

am: 2b2011a805

Change-Id: I933afd9d70a94ff15699e0da8bb2dad3f8aa2f20
This commit is contained in:
Suren Baghdasaryan
2018-10-15 09:34:05 -07:00
committed by android-build-merger

View File

@@ -162,9 +162,11 @@ public final class ProcessList {
// LMK_TARGET <minfree> <minkillprio> ... (up to 6 pairs) // LMK_TARGET <minfree> <minkillprio> ... (up to 6 pairs)
// LMK_PROCPRIO <pid> <uid> <prio> // LMK_PROCPRIO <pid> <uid> <prio>
// LMK_PROCREMOVE <pid> // LMK_PROCREMOVE <pid>
// LMK_PROCPURGE
static final byte LMK_TARGET = 0; static final byte LMK_TARGET = 0;
static final byte LMK_PROCPRIO = 1; static final byte LMK_PROCPRIO = 1;
static final byte LMK_PROCREMOVE = 2; static final byte LMK_PROCREMOVE = 2;
static final byte LMK_PROCPURGE = 3;
// These are the various interesting memory levels that we will give to // These are the various interesting memory levels that we will give to
// the OOM killer. Note that the OOM killer only supports 6 slots, so we // the OOM killer. Note that the OOM killer only supports 6 slots, so we
@@ -813,31 +815,46 @@ public final class ProcessList {
return true; return true;
} }
// Never call directly, use writeLmkd() instead
private static boolean writeLmkdCommand(ByteBuffer buf) {
try {
sLmkdOutputStream.write(buf.array(), 0, buf.position());
} catch (IOException ex) {
Slog.w(TAG, "Error writing to lowmemorykiller socket");
try {
sLmkdSocket.close();
} catch (IOException ex2) {
}
sLmkdSocket = null;
return false;
}
return true;
}
private static void writeLmkd(ByteBuffer buf) { private static void writeLmkd(ByteBuffer buf) {
for (int i = 0; i < 3; i++) { for (int i = 0; i < 3; i++) {
if (sLmkdSocket == null) { if (sLmkdSocket == null) {
if (openLmkdSocket() == false) { if (openLmkdSocket() == false) {
try { try {
Thread.sleep(1000); Thread.sleep(1000);
} catch (InterruptedException ie) { } catch (InterruptedException ie) {
}
continue;
} }
} continue;
try {
sLmkdOutputStream.write(buf.array(), 0, buf.position());
return;
} catch (IOException ex) {
Slog.w(TAG, "Error writing to lowmemorykiller socket");
try {
sLmkdSocket.close();
} catch (IOException ex2) {
} }
sLmkdSocket = null; // Purge any previously registered pids
ByteBuffer purge_buf = ByteBuffer.allocate(4);
purge_buf.putInt(LMK_PROCPURGE);
if (writeLmkdCommand(purge_buf) == false) {
// Write failed, skip the rest and retry
continue;
}
}
if (writeLmkdCommand(buf)) {
return;
} }
} }
} }