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

Commit ed738648 authored by Priyanka Advani (xWF)'s avatar Priyanka Advani (xWF) Committed by Android (Google) Code Review
Browse files

Merge "Revert "Speculative fix for concurrency SessionManager issue"" into main

parents e0519f2f 5d8accdd
Loading
Loading
Loading
Loading
+1 −18
Original line number Diff line number Diff line
@@ -68,7 +68,7 @@ public class Log {
    // Used to synchronize singleton logging lazy initialization
    private static final Object sSingletonSync = new Object();
    private static EventManager sEventManager;
    private static volatile SessionManager sSessionManager;
    private static SessionManager sSessionManager;
    private static Object sLock = null;

    /**
@@ -379,23 +379,6 @@ public class Log {
        return sSessionManager;
    }

    @VisibleForTesting
    public static SessionManager setSessionManager(Context context,
            java.lang.Runnable cleanSessionRunnable) {
        // Checking for null again outside of synchronization because we only need to synchronize
        // during the lazy loading of the session logger. We don't need to synchronize elsewhere.
        if (sSessionManager == null) {
            synchronized (sSingletonSync) {
                if (sSessionManager == null) {
                    sSessionManager = new SessionManager(cleanSessionRunnable);
                    sSessionManager.setContext(context);
                    return sSessionManager;
                }
            }
        }
        return sSessionManager;
    }

    public static void setTag(String tag) {
        TAG = tag;
        DEBUG = isLoggable(android.util.Log.DEBUG);
+13 −21
Original line number Diff line number Diff line
@@ -62,7 +62,9 @@ public class SessionManager {

    @VisibleForTesting
    public final ConcurrentHashMap<Integer, Session> mSessionMapper = new ConcurrentHashMap<>(64);
    private final java.lang.Runnable mCleanStaleSessions;
    @VisibleForTesting
    public java.lang.Runnable mCleanStaleSessions = () ->
            cleanupStaleSessions(getSessionCleanupTimeoutMs());
    private final Handler mSessionCleanupHandler = new Handler(Looper.getMainLooper());

    // Overridden in LogTest to skip query to ContentProvider
@@ -108,37 +110,27 @@ public class SessionManager {
    }

    public SessionManager() {
        mCleanStaleSessions = () -> cleanupStaleSessions(getSessionCleanupTimeoutMs());
    }

    @VisibleForTesting
    public SessionManager(java.lang.Runnable cleanStaleSessionsRunnable) {
        mCleanStaleSessions = cleanStaleSessionsRunnable;
    }

    private long getSessionCleanupTimeoutMs() {
        return mSessionCleanupTimeoutMs.get();
    }

    private void resetStaleSessionTimer() {
    private synchronized void resetStaleSessionTimer() {
        if (!Flags.endSessionImprovements()) {
            resetStaleSessionTimerOld();
            return;
        }
            mSessionCleanupHandler.removeCallbacksAndMessages(null);
            // Will be null in Log Testing
        if (mCleanStaleSessions == null) return;
        synchronized (mSessionCleanupHandler) {
            if (!mSessionCleanupHandler.hasCallbacks(mCleanStaleSessions)) {
            if (mCleanStaleSessions != null) {
                mSessionCleanupHandler.postDelayed(mCleanStaleSessions,
                        getSessionCleanupTimeoutMs());
            }
        } else {
            if (mCleanStaleSessions != null
                    && !mSessionCleanupHandler.hasCallbacks(mCleanStaleSessions)) {
                mSessionCleanupHandler.postDelayed(mCleanStaleSessions,
                        getSessionCleanupTimeoutMs());
            }
        }

    private synchronized void resetStaleSessionTimerOld() {
        if (mCleanStaleSessions == null) return;
        mSessionCleanupHandler.removeCallbacksAndMessages(null);
        mSessionCleanupHandler.postDelayed(mCleanStaleSessions, getSessionCleanupTimeoutMs());
    }

    /**