diff options
Diffstat (limited to 'libs/ui/EventHub.cpp')
| -rw-r--r-- | libs/ui/EventHub.cpp | 10 | 
1 files changed, 8 insertions, 2 deletions
diff --git a/libs/ui/EventHub.cpp b/libs/ui/EventHub.cpp index e39a357598a9..4aac455153db 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));  |