From 29c38dc24a05b329c64bd00c9062e52bfef64b04 Mon Sep 17 00:00:00 2001 From: Atneya Nair Date: Wed, 26 Apr 2023 22:42:00 -0700 Subject: [PATCH] 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 --- .../server/soundtrigger/SoundTriggerService.java | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/services/voiceinteraction/java/com/android/server/soundtrigger/SoundTriggerService.java b/services/voiceinteraction/java/com/android/server/soundtrigger/SoundTriggerService.java index b062e6b08e002..913535e06a214 100644 --- a/services/voiceinteraction/java/com/android/server/soundtrigger/SoundTriggerService.java +++ b/services/voiceinteraction/java/com/android/server/soundtrigger/SoundTriggerService.java @@ -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(); } }