diff --git a/libs/ui/EventHub.cpp b/libs/ui/EventHub.cpp index e39a35759..4aac45515 100644 --- a/libs/ui/EventHub.cpp +++ b/libs/ui/EventHub.cpp @@ -489,6 +489,7 @@ int EventHub::open_device(const char *deviceName) { int version; int fd; + int attempt; struct pollfd *new_mFDs; device_t **new_devices; char **new_device_names; @@ -500,12 +501,17 @@ int EventHub::open_device(const char *deviceName) LOGV("Opening device: %s", deviceName); AutoMutex _l(mLock); - - fd = open(deviceName, O_RDWR); + + for (attempt = 0; attempt < 10; attempt++) { + fd = open(deviceName, O_RDWR); + if (fd >= 0) break; + usleep(100); + } if(fd < 0) { LOGE("could not open %s, %s\n", deviceName, strerror(errno)); return -1; } + LOGV("Opened device: %s (%d failures)", deviceName, attempt); if(ioctl(fd, EVIOCGVERSION, &version)) { LOGE("could not get driver version for %s, %s\n", deviceName, strerror(errno));