From e697487d25e2b81a6ed0292f0e474d20bab57a62 Mon Sep 17 00:00:00 2001 From: Keeley Hoek Date: Thu, 11 Apr 2024 17:27:18 -0400 Subject: [PATCH] fix(hid): Eliminate data race in USB pathway causing dropped keys --- app/src/usb_hid.c | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/app/src/usb_hid.c b/app/src/usb_hid.c index cd3ef920..d1e99fbb 100644 --- a/app/src/usb_hid.c +++ b/app/src/usb_hid.c @@ -22,7 +22,7 @@ LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); static const struct device *hid_dev; -static K_SEM_DEFINE(hid_sem, 1, 1); +static K_SEM_DEFINE(hid_sem, 0, 1); static void in_ready_cb(const struct device *dev) { k_sem_give(&hid_sem); } @@ -136,11 +136,9 @@ static int zmk_usb_hid_send_report(const uint8_t *report, size_t len) { case USB_DC_UNKNOWN: return -ENODEV; default: - k_sem_take(&hid_sem, K_MSEC(30)); int err = hid_int_ep_write(hid_dev, report, len, NULL); - - if (err) { - k_sem_give(&hid_sem); + if (!err) { + k_sem_take(&hid_sem, K_MSEC(30)); } return err;