From a24105126a8293cd91216f45a91c4ae6f3b8263a Mon Sep 17 00:00:00 2001 From: Jonathan Aillet Date: Fri, 11 Oct 2019 14:13:32 +0200 Subject: Unsubscribe from unwanted events Unsubscribe from ALSA card control events when the card is not used by any 'halmap'. BUG-AGL: SPEC-2892 Change-Id: I3ce2ae8e7133797778d3d0edd393324aa345ef1f Signed-off-by: Jonathan Aillet --- .../4a-internals-hal-alsacore-link.c | 23 +++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/src/4a-internals-hal/4a-internals-hal-alsacore-link.c b/src/4a-internals-hal/4a-internals-hal-alsacore-link.c index 99b50a8..774054c 100644 --- a/src/4a-internals-hal/4a-internals-hal-alsacore-link.c +++ b/src/4a-internals-hal/4a-internals-hal-alsacore-link.c @@ -87,7 +87,9 @@ int InternalHalHandleAlsaCoreCardControlEvent(afb_api_t apiHandle, json_object *eventJ, struct HalData *currentHalData) { - int numid, cardidx; + int numid, cardidx, controlsUsingCardCount = 0, controlUsedCount = 0; + + char cardNbString[6]; json_object *valuesJ, *normalizedValuesJ; @@ -126,6 +128,9 @@ int InternalHalHandleAlsaCoreCardControlEvent(afb_api_t apiHandle, // Search for corresponding numid in ALSA controls list, if found, launch callback (if available) cds_list_for_each_entry(currentHalMapControl, ¤tHalData->internalHalData->halMapListHead, node) { + if(currentHalMapControl->cardNb == cardidx) + controlsUsingCardCount++; + if(currentHalMapControl->cardNb != cardidx || ! currentHalMapControl->ctl.alsaCtlProperties || currentHalMapControl->ctl.numid != numid) @@ -164,16 +169,28 @@ int InternalHalHandleAlsaCoreCardControlEvent(afb_api_t apiHandle, currentHalMapControl->ctl.numid); } - return 0; + controlUsedCount++; } + if(! controlsUsingCardCount) { + AFB_API_INFO(apiHandle, + "Receiving events from not handle card %i, unscubscribe from these events", + cardidx); + snprintf(cardNbString, sizeof(cardNbString), "hw:%i", cardidx); + InternalHalUnsubscribeFromAlsacoreCardEvent(apiHandle, cardNbString); + return 1; + } + + if(controlUsedCount) + return 0; + AFB_API_INFO(apiHandle, "Alsacore event with an unrecognized numid: %i, evtname=%s [msg=%s]", numid, evtLabel, json_object_get_string(eventJ)); - return 1; + return 2; } -- cgit 1.2.3-korg