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

Commit 287268db authored by Suren Baghdasaryan's avatar Suren Baghdasaryan Committed by Gerrit Code Review
Browse files

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

parents ffd40efe 2df4b03a
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;
            }
        }
    }