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

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

Merge "Request lmkd to purge its list of pids after establishing connection"

am: 287268db

Change-Id: I558762f689dbe704bf009f11f6f927f04e9b5dee
parents a02d76e2 287268db
Loading
Loading
Loading
Loading
+35 −18
Original line number Diff line number Diff line
@@ -157,9 +157,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
@@ -808,6 +810,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++) {
@@ -819,20 +839,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;
            }
        }
    }