Avoid deadlock BT/LE HID send when disconnected (#2252)

Fixes #2251

The 2-phase send could get out of whack if transmission was attempted when
no device was connected. Clear things up so if things aren't connected,
then no data gets set as pending.
This commit is contained in:
Earle F. Philhower, III 2024-07-04 13:58:33 -07:00 committed by GitHub
parent 99b32b8436
commit 2cde8bd789
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 13 additions and 9 deletions

View file

@ -178,11 +178,13 @@ public:
while (connected() && _needToSend) {
/* noop busy wait */
}
__lockBluetooth();
if (connected()) {
_needToSend = true;
_sendReport = rpt;
_sendReportLen = len;
__lockBluetooth();
hids_device_request_can_send_now_event(_con_handle);
}
__unlockBluetooth();
while (connected() && _needToSend) {
/* noop busy wait */

View file

@ -142,12 +142,14 @@ public:
}
bool send(int id, void *rpt, int len) {
__lockBluetooth();
if (connected()) {
_needToSend = true;
_sendReportID = id;
_sendReport = rpt;
_sendReportLen = len;
__lockBluetooth();
hid_device_request_can_send_now_event(getCID());
}
__unlockBluetooth();
while (connected() && _needToSend) {
/* noop busy wait */