diff --git a/src/hidapi/linux/hid.c b/src/hidapi/linux/hid.c index 89d6ae16f6562..95f12ccd4f908 100644 --- a/src/hidapi/linux/hid.c +++ b/src/hidapi/linux/hid.c @@ -1096,7 +1096,17 @@ hid_device * HID_API_EXPORT hid_open_path(const char *path) return NULL; } - dev->device_handle = open(path, O_RDWR | O_CLOEXEC); + const int MAX_ATTEMPTS = 10; + int attempt; + for (attempt = 1; attempt <= MAX_ATTEMPTS; ++attempt) { + dev->device_handle = open(path, O_RDWR | O_CLOEXEC); + if (dev->device_handle < 0 && errno == EACCES) { + /* udev might be setting up permissions, wait a bit and try again */ + usleep(1 * 1000); + continue; + } + break; + } if (dev->device_handle >= 0) { int res, desc_size = 0;