From 1d8a71ec73aaccfcc045cff11b3fb34105fdb384 Mon Sep 17 00:00:00 2001 From: JengHyun Kang Date: Mon, 22 Aug 2016 16:54:29 +0900 Subject: [PATCH] evdev: Do not open the already opened device Change-Id: I96ba5287f28dfa301628232a5a6a02f1baf1c7a2 --- src/evdev.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/evdev.c b/src/evdev.c index 5a43dee8..641a23c0 100644 --- a/src/evdev.c +++ b/src/evdev.c @@ -2441,6 +2441,7 @@ evdev_device_create(struct libinput_seat *seat, const char *devnode; char *sysname = str_sanitize(udev_device_get_sysname(udev_device)); char buf[STRERR_BUFSIZE] = {0, }; + struct libinput_device *dev; #ifdef HAVE_INPUT_SET_DEFAULT_PROPERTY if (input_set_default_property(udev_device) < 0) @@ -2458,6 +2459,15 @@ evdev_device_create(struct libinput_seat *seat, goto err; } + 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); + return NULL; + } + } + /* 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. */ -- 2.34.1