Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ad87d239 authored by Suren Baghdasaryan's avatar Suren Baghdasaryan Committed by android-build-merger
Browse files

Request lmkd to purge its list of pids after establishing connection

am: 2b2011a8

Change-Id: I933afd9d70a94ff15699e0da8bb2dad3f8aa2f20
parents 3d23e905 2b2011a8
Loading
Loading
Loading
Loading
+35 −18
Original line number Diff line number Diff line
@@ -162,9 +162,11 @@ public final class ProcessList {
    // LMK_TARGET <minfree> <minkillprio> ... (up to 6 pairs)
    // LMK_PROCPRIO <pid> <uid> <prio>
    // LMK_PROCREMOVE <pid>
    // LMK_PROCPURGE
    static final byte LMK_TARGET = 0;
    static final byte LMK_PROCPRIO = 1;
    static final byte LMK_PROCREMOVE = 2;
    static final byte LMK_PROCPURGE = 3;

    // 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
@@ -813,6 +815,24 @@ public final class ProcessList {
        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) {

        for (int i = 0; i < 3; i++) {
@@ -824,20 +844,17 @@ public final class ProcessList {
                    }
                    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) {
                // 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;
                }

                sLmkdSocket = null;
            }
            if (writeLmkdCommand(buf)) {
                return;
            }
        }
    }