diff --git a/profiles/input/device.c b/profiles/input/device.c
index 4421388..375314e 100644
--- a/profiles/input/device.c
+++ b/profiles/input/device.c
if (!idev->uhid_created)
return 0;
+ bt_uhid_unregister_all(idev->uhid);
+
memset(&ev, 0, sizeof(ev));
ev.type = UHID_DESTROY;
diff --git a/src/shared/uhid.c b/src/shared/uhid.c
index 685f902..71a4e04 100644
--- a/src/shared/uhid.c
+++ b/src/shared/uhid.c
return true;
}
+bool bt_uhid_unregister_all(struct bt_uhid *uhid)
+{
+ if (!uhid)
+ return false;
+
+ queue_remove_all(uhid->notify_list, NULL, NULL, free);
+ return true;
+}
+
int bt_uhid_send(struct bt_uhid *uhid, const struct uhid_event *ev)
{
ssize_t len;
diff --git a/src/shared/uhid.h b/src/shared/uhid.h
index 459a249..dbdca85 100644
--- a/src/shared/uhid.h
+++ b/src/shared/uhid.h
unsigned int bt_uhid_register(struct bt_uhid *uhid, uint32_t event,
bt_uhid_callback_t func, void *user_data);
bool bt_uhid_unregister(struct bt_uhid *uhid, unsigned int id);
+bool bt_uhid_unregister_all(struct bt_uhid *uhid);
int bt_uhid_send(struct bt_uhid *uhid, const struct uhid_event *ev);