From: Luiz Augusto von Dentz <luiz.von.dentz@xxxxxxxxx> uhid->start_id shall not be unregistered in case of bt_uhid_unregister_all as that is considerer a internal notification not under controller of the users. --- src/shared/uhid.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/shared/uhid.c b/src/shared/uhid.c index 98d6198c7d0a..ed21e1399ba7 100644 --- a/src/shared/uhid.c +++ b/src/shared/uhid.c @@ -284,12 +284,22 @@ bool bt_uhid_unregister(struct bt_uhid *uhid, unsigned int id) return true; } +static bool match_not_id(const void *a, const void *b) +{ + const struct uhid_notify *notify = a; + unsigned int id = PTR_TO_UINT(b); + + return notify->id != id; +} + bool bt_uhid_unregister_all(struct bt_uhid *uhid) { if (!uhid) return false; - queue_remove_all(uhid->notify_list, NULL, NULL, free); + queue_remove_all(uhid->notify_list, match_not_id, + UINT_TO_PTR(uhid->start_id), free); + return true; } -- 2.46.0