bap: Fix not removing endpoint if local PAC is unregistered
authorLuiz Augusto von Dentz <luiz.von.dentz@intel.com>
Tue, 24 Jan 2023 23:45:39 +0000 (15:45 -0800)
committerAyush Garg <ayush.garg@samsung.com>
Fri, 5 Jan 2024 10:11:34 +0000 (15:41 +0530)
If local PAC is unregistered it would also notify via pac_removed
callback which shall unregister the endpoint D-Bus object.

Fixes: https://github.com/bluez/bluez/issues/457#issuecomment-1402178691

profiles/audio/bap.c

index 24d7a03..4d5780f 100644 (file)
@@ -1051,12 +1051,12 @@ static void pac_added(struct bt_bap_pac *pac, void *user_data)
        bt_bap_foreach_pac(data->bap, BT_BAP_SINK, pac_found, service);
 }
 
-static bool ep_match_rpac(const void *data, const void *match_data)
+static bool ep_match_pac(const void *data, const void *match_data)
 {
        const struct bap_ep *ep = data;
        const struct bt_bap_pac *pac = match_data;
 
-       return ep->rpac == pac;
+       return ep->rpac == pac || ep->lpac == pac;
 }
 
 static void pac_removed(struct bt_bap_pac *pac, void *user_data)
@@ -1084,7 +1084,7 @@ static void pac_removed(struct bt_bap_pac *pac, void *user_data)
                return;
        }
 
-       ep = queue_remove_if(queue, ep_match_rpac, pac);
+       ep = queue_remove_if(queue, ep_match_pac, pac);
        if (!ep)
                return;