mirror of https://github.com/jetkvm/kvm.git
Add timeout to hid keyboard write operation
Co-authored-by: adam <adam@buildjet.com>
This commit is contained in:
parent
20783e6118
commit
d7e5369990
|
@ -256,15 +256,37 @@ func (u *UsbGadget) keyboardWriteHidFile(modifier byte, keys []byte) error {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
_, err := u.writeWithTimeout(u.keyboardHidFile, append([]byte{modifier, 0x00}, keys[:hidKeyBufferSize]...))
|
data := append([]byte{modifier, 0x00}, keys[:hidKeyBufferSize]...)
|
||||||
|
file := u.keyboardHidFile
|
||||||
|
done := make(chan error, 1)
|
||||||
|
go func(f *os.File, payload []byte) {
|
||||||
|
_, err := f.Write(payload)
|
||||||
|
done <- err
|
||||||
|
}(file, data)
|
||||||
|
|
||||||
|
t := time.NewTimer(hidWriteTimeout)
|
||||||
|
defer t.Stop()
|
||||||
|
|
||||||
|
select {
|
||||||
|
case err := <-done:
|
||||||
if err != nil {
|
if err != nil {
|
||||||
u.logWithSuppression("keyboardWriteHidFile", 100, u.log, err, "failed to write to hidg0")
|
u.logWithSuppression("keyboardWriteHidFile", 100, u.log, err, "failed to write to hidg0")
|
||||||
u.keyboardHidFile.Close()
|
_ = file.Close()
|
||||||
|
if u.keyboardHidFile == file {
|
||||||
u.keyboardHidFile = nil
|
u.keyboardHidFile = nil
|
||||||
|
}
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
u.resetLogSuppressionCounter("keyboardWriteHidFile")
|
u.resetLogSuppressionCounter("keyboardWriteHidFile")
|
||||||
return nil
|
return nil
|
||||||
|
case <-t.C:
|
||||||
|
u.logWithSuppression("keyboardWriteHidFileTimeout", 100, u.log, fmt.Errorf("deadline exceeded"), "write timed out: %s", file.Name())
|
||||||
|
_ = file.Close()
|
||||||
|
if u.keyboardHidFile == file {
|
||||||
|
u.keyboardHidFile = nil
|
||||||
|
}
|
||||||
|
return fmt.Errorf("keyboard write timeout")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (u *UsbGadget) UpdateKeysDown(modifier byte, keys []byte) KeysDownState {
|
func (u *UsbGadget) UpdateKeysDown(modifier byte, keys []byte) KeysDownState {
|
||||||
|
|
Loading…
Reference in New Issue