⛏️ index : haiku.git

author Augustin Cavalier <waddlesplash@gmail.com> 2025-04-22 12:34:47.0 -04:00:00
committer Augustin Cavalier <waddlesplash@gmail.com> 2025-04-22 12:34:47.0 -04:00:00
commit
09af690ea4ffcf6bca32c7b78583f5e2177db46b [patch]
tree
a280115ec842bcb68f7c6997c82153f3fce2c28a
parent
1e1ad7efc96f94447815373be60fc1cc74962c65
download
09af690ea4ffcf6bca32c7b78583f5e2177db46b.tar.gz

HID: Handle report waiting interruptions properly.

B_INTERRUPTED is already used by the report processing code,
instead return B_CANCELED and handle this specially.

Fixes #19530.

Diff

 src/add-ons/kernel/drivers/input/hid_shared/HIDReport.cpp               | 3 ++-
 src/add-ons/kernel/drivers/input/hid_shared/KeyboardProtocolHandler.cpp | 2 +-
 src/add-ons/kernel/drivers/input/hid_shared/MouseProtocolHandler.cpp    | 2 +-
 src/add-ons/kernel/drivers/input/hid_shared/TabletProtocolHandler.cpp   | 2 +-
 4 files changed, 5 insertions(+), 4 deletions(-)

diff --git a/src/add-ons/kernel/drivers/input/hid_shared/HIDReport.cpp b/src/add-ons/kernel/drivers/input/hid_shared/HIDReport.cpp
index 3aca229..1008dcb 100644
--- a/src/add-ons/kernel/drivers/input/hid_shared/HIDReport.cpp
+++ b/src/add-ons/kernel/drivers/input/hid_shared/HIDReport.cpp
@@ -235,12 +235,13 @@
	status_t result = fParser->Device()->MaybeScheduleTransfer(this);
	if (result != B_OK) {
		TRACE_ALWAYS("scheduling transfer failed\n");
		conditionVariableEntry.Wait(B_RELATIVE_TIMEOUT | B_CAN_INTERRUPT, 0);
		return result;
	}

	result = conditionVariableEntry.Wait(B_RELATIVE_TIMEOUT | B_CAN_INTERRUPT, timeout);
	TRACE("waiting for report returned with result: %s\n", strerror(result));
	if (result == B_INTERRUPTED)
		return B_CANCELED;
	if (result != B_OK)
		return result;

diff --git a/src/add-ons/kernel/drivers/input/hid_shared/KeyboardProtocolHandler.cpp b/src/add-ons/kernel/drivers/input/hid_shared/KeyboardProtocolHandler.cpp
index 657880f..aaf627d 100644
--- a/src/add-ons/kernel/drivers/input/hid_shared/KeyboardProtocolHandler.cpp
+++ b/src/add-ons/kernel/drivers/input/hid_shared/KeyboardProtocolHandler.cpp
@@ -514,7 +514,7 @@
			return B_ERROR;
		}

		if ((*cookie & PROTOCOL_HANDLER_COOKIE_FLAG_CLOSED) != 0)
		if (result == B_CANCELED || (*cookie & PROTOCOL_HANDLER_COOKIE_FLAG_CLOSED) != 0)
			return B_CANCELED;

		if (result != B_TIMED_OUT && result != B_INTERRUPTED) {
diff --git a/src/add-ons/kernel/drivers/input/hid_shared/MouseProtocolHandler.cpp b/src/add-ons/kernel/drivers/input/hid_shared/MouseProtocolHandler.cpp
index df9810c..d46d888 100644
--- a/src/add-ons/kernel/drivers/input/hid_shared/MouseProtocolHandler.cpp
+++ b/src/add-ons/kernel/drivers/input/hid_shared/MouseProtocolHandler.cpp
@@ -192,7 +192,7 @@
			return B_DEV_NOT_READY;
		}

		if ((*cookie & PROTOCOL_HANDLER_COOKIE_FLAG_CLOSED) != 0)
		if (result == B_CANCELED || (*cookie & PROTOCOL_HANDLER_COOKIE_FLAG_CLOSED) != 0)
			return B_CANCELED;

		if (result != B_INTERRUPTED) {
diff --git a/src/add-ons/kernel/drivers/input/hid_shared/TabletProtocolHandler.cpp b/src/add-ons/kernel/drivers/input/hid_shared/TabletProtocolHandler.cpp
index fda6725..a158d7d 100644
--- a/src/add-ons/kernel/drivers/input/hid_shared/TabletProtocolHandler.cpp
+++ b/src/add-ons/kernel/drivers/input/hid_shared/TabletProtocolHandler.cpp
@@ -242,7 +242,7 @@
			return B_DEV_NOT_READY;
		}

		if ((*cookie & PROTOCOL_HANDLER_COOKIE_FLAG_CLOSED) != 0)
		if (result == B_CANCELED || (*cookie & PROTOCOL_HANDLER_COOKIE_FLAG_CLOSED) != 0)
			return B_CANCELED;

		if (result != B_INTERRUPTED) {