evdev: Do not open the already opened device 57/84757/2
authorJengHyun Kang <jhyuni.kang@samsung.com>
Mon, 22 Aug 2016 07:54:29 +0000 (16:54 +0900)
committerJengHyun Kang <jhyuni.kang@samsung.com>
Mon, 22 Aug 2016 09:21:17 +0000 (18:21 +0900)
Change-Id: I96ba5287f28dfa301628232a5a6a02f1baf1c7a2

src/evdev.c

index 3f8708c529360e694ce892fff589ed27017589c8..4067062a9f46ad1d8734c9a1c5e71cd3738a9e0d 100644 (file)
@@ -1771,6 +1771,7 @@ evdev_device_create(struct libinput_seat *seat,
        int unhandled_device = 0;
        const char *devnode;
        char buf[STRERR_BUFSIZE] = {0, };
+       struct libinput_device *dev;
 
 #ifdef HAVE_INPUT_SET_DEFAULT_PROPERTY
        if (input_set_default_property(udev_device) < 0)
@@ -1778,6 +1779,15 @@ evdev_device_create(struct libinput_seat *seat,
 #endif
        devnode = udev_device_get_devnode(udev_device);
 
+       list_for_each(dev, &seat->devices_list, link) {
+               struct evdev_device *d = (struct evdev_device*)dev;
+               if (strcmp(devnode, udev_device_get_devnode(d->udev_device))== 0) {
+                       log_info(libinput,
+                               "%s device is already opened\n", d->devname);
+                       goto err;
+               }
+       }
+
        /* Use non-blocking mode so that we can loop on read on
         * evdev_device_data() until all events on the fd are
         * read.  mtdev_get() also expects this. */