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

Commit bb68a069 authored by Brad Ebinger's avatar Brad Ebinger
Browse files

Resolve possible deadlock in Logging

Currently, if the sCleanStaleSessions telecom.Runnable runs while
another thread has the Log lock, a deadlock can occur. Instead, a normal
android.Runnable will be used in order to prevent the deadlock from
occuring.

Bug: 27552152
Change-Id: Ie41aac6d77db243daa048a9a8b0e2217b9c3ac5c
parent 482e43fc
Loading
Loading
Loading
Loading
+4 −5
Original line number Original line Diff line number Diff line
@@ -258,9 +258,9 @@ public class Log {
    @VisibleForTesting
    @VisibleForTesting
    public static Handler sSessionCleanupHandler = new Handler(Looper.getMainLooper());
    public static Handler sSessionCleanupHandler = new Handler(Looper.getMainLooper());
    @VisibleForTesting
    @VisibleForTesting
    public static Runnable sCleanStaleSessions = new Runnable("L.cSS") {
    public static java.lang.Runnable sCleanStaleSessions = new java.lang.Runnable() {
        @Override
        @Override
        public void loggedRun() {
        public void run() {
            cleanupStaleSessions(getSessionCleanupTimeoutMs());
            cleanupStaleSessions(getSessionCleanupTimeoutMs());
        }
        }
    };
    };
@@ -375,8 +375,7 @@ public class Log {
        sSessionCleanupHandler.removeCallbacksAndMessages(null);
        sSessionCleanupHandler.removeCallbacksAndMessages(null);
        // Will be null in Log Testing
        // Will be null in Log Testing
        if (sCleanStaleSessions != null) {
        if (sCleanStaleSessions != null) {
            sSessionCleanupHandler.postDelayed(sCleanStaleSessions.prepare(),
            sSessionCleanupHandler.postDelayed(sCleanStaleSessions, getSessionCleanupTimeoutMs());
                    getSessionCleanupTimeoutMs());
        }
        }
    }
    }


@@ -593,7 +592,7 @@ public class Log {
    }
    }


    @VisibleForTesting
    @VisibleForTesting
    public static void cleanupStaleSessions(long timeoutMs) {
    public static synchronized void cleanupStaleSessions(long timeoutMs) {
        String logMessage = "Stale Sessions Cleaned:\n";
        String logMessage = "Stale Sessions Cleaned:\n";
        boolean isSessionsStale = false;
        boolean isSessionsStale = false;
        long currentTimeMs = System.currentTimeMillis();
        long currentTimeMs = System.currentTimeMillis();
+1 −1
Original line number Original line Diff line number Diff line
@@ -24,7 +24,7 @@ public abstract class Runnable {


    private Session mSubsession;
    private Session mSubsession;
    private final String mSubsessionName;
    private final String mSubsessionName;
    private Object mLock = new Object();
    private final Object mLock = new Object();
    private final java.lang.Runnable mRunnable = new java.lang.Runnable() {
    private final java.lang.Runnable mRunnable = new java.lang.Runnable() {
            @Override
            @Override
            public void run() {
            public void run() {