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
This commit is contained in:
Atneya Nair
2023-04-26 22:42:00 -07:00
parent a346767333
commit 29c38dc24a

View File

@@ -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();
}
}