Call IOHIDDeviceClose() if needed in hid_close() on macOS

Unregistering the input report callback marks the device as disconnected, so IOHIDDeviceClose() would never be called if the device wasn't already disconnected  when hid_close() was called.

Fixes https://github.com/libsdl-org/SDL/issues/12255

(cherry picked from commit 2442c85cb8)
This commit is contained in:
Sam Lantinga committed 2025-04-29 11:24:27 -07:00
1 parent 7fc5edab8e
commit 8b7a088efc
1 file changed
+5 -2
+5 -2
View File
@@ -1135,11 +1135,14 @@ int HID_API_EXPORT hid_get_feature_report(hid_device *dev, unsigned char *data,
void HID_API_EXPORT hid_close(hid_device *dev) void HID_API_EXPORT hid_close(hid_device *dev)
{ {
int disconnected;
if (!dev) if (!dev)
return; return;
/* Disconnect the report callback before close. */ /* Disconnect the report callback before close. */
if (!dev->disconnected) { disconnected = dev->disconnected;
if (!disconnected) {
IOHIDDeviceRegisterInputReportCallback( IOHIDDeviceRegisterInputReportCallback(
dev->device_handle, dev->input_report_buf, dev->max_input_report_len, dev->device_handle, dev->input_report_buf, dev->max_input_report_len,
NULL, dev); NULL, dev);
@@ -1163,7 +1166,7 @@ void HID_API_EXPORT hid_close(hid_device *dev)
/* Close the OS handle to the device, but only if it's not /* Close the OS handle to the device, but only if it's not
been unplugged. If it's been unplugged, then calling been unplugged. If it's been unplugged, then calling
IOHIDDeviceClose() will crash. */ IOHIDDeviceClose() will crash. */
if (!dev->disconnected) { if (!disconnected) {
IOHIDDeviceClose(dev->device_handle, kIOHIDOptionsTypeNone); IOHIDDeviceClose(dev->device_handle, kIOHIDOptionsTypeNone);
} }