linux-bluetooth.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH BlueZ v2 1/2] input/hog: Fix double registering report value callbacks
@ 2021-01-22  0:13 Sonny Sasaka
  2021-01-22  0:13 ` [PATCH BlueZ v2 2/2] input/hog: Do not create UHID if report map is broken Sonny Sasaka
                   ` (2 more replies)
  0 siblings, 3 replies; 9+ messages in thread
From: Sonny Sasaka @ 2021-01-22  0:13 UTC (permalink / raw)
  To: linux-bluetooth; +Cc: Sonny Sasaka

In commit 23b69ab3e484 ("input/hog: Cache the HID report map"), we
optimized HOG reconnection by registering report value callbacks early,
but there was a bug where we also re-register the same report value
callbacks after at CCC write callback. We should handle this case by
avoiding the second callback register if we know we have done it
earlier.

---
 profiles/input/hog-lib.c | 12 ++++++++++++
 1 file changed, 12 insertions(+)

diff --git a/profiles/input/hog-lib.c b/profiles/input/hog-lib.c
index 1f132aa4c..089f42826 100644
--- a/profiles/input/hog-lib.c
+++ b/profiles/input/hog-lib.c
@@ -80,6 +80,7 @@ struct bt_hog {
 	struct bt_uhid		*uhid;
 	int			uhid_fd;
 	bool			uhid_created;
+	bool			report_value_cb_registered;
 	gboolean		has_report_id;
 	uint16_t		bcdhid;
 	uint8_t			bcountrycode;
@@ -336,6 +337,13 @@ static void report_ccc_written_cb(guint8 status, const guint8 *pdu,
 		return;
 	}
 
+	/* If we already had the report map cache, we must have registered UHID
+	 * and the report value callbacks. In that case, don't re-register the
+	 * report value callbacks here.
+	 */
+	if (hog->report_value_cb_registered)
+		return;
+
 	report->notifyid = g_attrib_register(hog->attrib,
 					ATT_OP_HANDLE_NOTIFY,
 					report->value_handle,
@@ -1703,6 +1711,8 @@ bool bt_hog_attach(struct bt_hog *hog, void *gatt)
 					report_value_cb, r, NULL);
 	}
 
+	hog->report_value_cb_registered = true;
+
 	return true;
 }
 
@@ -1753,6 +1763,8 @@ void bt_hog_detach(struct bt_hog *hog)
 		}
 	}
 
+	hog->report_value_cb_registered = false;
+
 	if (hog->scpp)
 		bt_scpp_detach(hog->scpp);
 
-- 
2.29.2


^ permalink raw reply related	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2021-01-26  1:24 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-01-22  0:13 [PATCH BlueZ v2 1/2] input/hog: Fix double registering report value callbacks Sonny Sasaka
2021-01-22  0:13 ` [PATCH BlueZ v2 2/2] input/hog: Do not create UHID if report map is broken Sonny Sasaka
2021-01-22  0:36   ` Luiz Augusto von Dentz
2021-01-22  1:24     ` Sonny Sasaka
2021-01-25 19:35       ` Sonny Sasaka
2021-01-25 21:50         ` Luiz Augusto von Dentz
2021-01-22  0:39 ` [PATCH BlueZ v2 1/2] input/hog: Fix double registering report value callbacks Luiz Augusto von Dentz
2021-01-22  0:51   ` Sonny Sasaka
2021-01-22  1:58 ` [BlueZ,v2,1/2] " bluez.test.bot

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).