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

Commit 29c38dc2 authored by Atneya Nair's avatar Atneya Nair
Browse files

Prevent detached ST loggers from double cacheing

Since we support double detaches as a no-op, ensure that we only add a
detached STService event logger to the detached cache if it was
successfully removed from the active set.

Bug: 272147641
Fixes: 279855817
Test: Manual verification of dumpsys post-detach
Change-Id: I127e1a2c5d2570db828ce6db35d84000848b3502
parent a3467673
Loading
Loading
Loading
Loading
+6 −5
Original line number Diff line number Diff line
@@ -296,7 +296,10 @@ public class SoundTriggerService extends SystemService {

    // Helper to add session logger to the capacity limited detached list.
    // If we are at capacity, remove the oldest, and retry
    private void addDetachedSessionLogger(EventLogger logger) {
    private void detachSessionLogger(EventLogger logger) {
        if (!mSessionEventLoggers.remove(logger)) {
            return;
        }
        // Attempt to push to the top of the queue
        while (!mDetachedSessionEventLoggers.offerFirst(logger)) {
            // Remove the oldest element, if one still exists
@@ -872,8 +875,7 @@ public class SoundTriggerService extends SystemService {

        private void detach() {
            mSoundTriggerHelper.detach();
            mSessionEventLoggers.remove(mEventLogger);
            addDetachedSessionLogger(mEventLogger);
            detachSessionLogger(mEventLogger);
        }

        private void enforceCallingPermission(String permission) {
@@ -1659,8 +1661,7 @@ public class SoundTriggerService extends SystemService {

            private void detachInternal() {
                mEventLogger.enqueue(new SessionEvent(Type.DETACH, null));
                mSessionEventLoggers.remove(mEventLogger);
                addDetachedSessionLogger(mEventLogger);
                detachSessionLogger(mEventLogger);
                mSoundTriggerHelper.detach();
            }
        }