From 867ed88c6e8534aa2ede1ad1b1d5e118615830da Mon Sep 17 00:00:00 2001 From: Siyuan Miao Date: Thu, 4 Sep 2025 11:24:31 +0200 Subject: [PATCH] chore: unlock keyboardStateLock before calling onKeysDownChange --- internal/usbgadget/hid_keyboard.go | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/internal/usbgadget/hid_keyboard.go b/internal/usbgadget/hid_keyboard.go index c6134dd7..fb710c20 100644 --- a/internal/usbgadget/hid_keyboard.go +++ b/internal/usbgadget/hid_keyboard.go @@ -148,17 +148,20 @@ func (u *UsbGadget) GetKeysDownState() KeysDownState { func (u *UsbGadget) updateKeyDownState(state KeysDownState) { u.log.Trace().Interface("old", u.keysDownState).Interface("new", state).Msg("acquiring keyboardStateLock for updateKeyDownState") - u.keyboardStateLock.Lock() - defer u.keyboardStateLock.Unlock() + // this is intentional to unlock keyboard state lock before onKeysDownChange callback + { + u.keyboardStateLock.Lock() + defer u.keyboardStateLock.Unlock() - if u.keysDownState.Modifier == state.Modifier && - bytes.Equal(u.keysDownState.Keys, state.Keys) { - return // No change in key down state + if u.keysDownState.Modifier == state.Modifier && + bytes.Equal(u.keysDownState.Keys, state.Keys) { + return // No change in key down state + } + + u.log.Trace().Interface("old", u.keysDownState).Interface("new", state).Msg("keysDownState updated") + u.keysDownState = state } - u.log.Trace().Interface("old", u.keysDownState).Interface("new", state).Msg("keysDownState updated") - u.keysDownState = state - if u.onKeysDownChange != nil { u.log.Trace().Interface("state", state).Msg("calling onKeysDownChange") (*u.onKeysDownChange)(state)