Audio policy: fix effect parking when releasing an input
When releasing a record client from an input descriptor,
park effects in the client session only if this client is
the last connected client in this session.
Bug: 330442316
Test: repro steps in the bug
Change-Id: I55c60cb8be8beffe23ded62fcacbe5dc028f3a8f
diff --git a/services/audiopolicy/managerdefault/AudioPolicyManager.cpp b/services/audiopolicy/managerdefault/AudioPolicyManager.cpp
index 3bebb11..46e439f 100644
--- a/services/audiopolicy/managerdefault/AudioPolicyManager.cpp
+++ b/services/audiopolicy/managerdefault/AudioPolicyManager.cpp
@@ -3177,7 +3177,12 @@
ALOGV("%s %d", __FUNCTION__, input);
inputDesc->removeClient(portId);
- mEffects.putOrphanEffects(client->session(), input, &mInputs, mpClientInterface);
+
+ // If no more clients are present in this session, park effects to an orphan chain
+ RecordClientVector clientsOnSession = inputDesc->getClientsForSession(client->session());
+ if (clientsOnSession.size() == 0) {
+ mEffects.putOrphanEffects(client->session(), input, &mInputs, mpClientInterface);
+ }
if (inputDesc->getClientCount() > 0) {
ALOGV("%s(%d) %zu clients remaining", __func__, portId, inputDesc->getClientCount());
return;