xserver-xorg-input-libinput: Changes to 'upstream-unstable'
configure.ac | 2 -
src/xf86libinput.c | 58 +++++++++++++++++++++++++++++++++++++++++++++++++++--
2 files changed, 57 insertions(+), 3 deletions(-)
New commits:
commit 728217775626e2086d7c3acd0d242562390f145b
Author: Peter Hutterer <peter.hutterer@who-t.net>
Date: Wed Oct 19 10:55:12 2016 +1000
xf86-input-libinput 0.22.0
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
diff --git a/configure.ac b/configure.ac
index 3fad444..9894817 100644
--- a/configure.ac
+++ b/configure.ac
@@ -23,7 +23,7 @@
# Initialize Autoconf
AC_PREREQ([2.60])
AC_INIT([xf86-input-libinput],
- [0.21.0],
+ [0.22.0],
[https://bugs.freedesktop.org/enter_bug.cgi?product=xorg],
[xf86-input-libinput])
AC_CONFIG_SRCDIR([Makefile.am])
commit 1dd61abf7e6af9cdd12d8f5a35fe90954aa03e64
Author: Peter Hutterer <peter.hutterer@who-t.net>
Date: Wed Oct 19 10:37:32 2016 +1000
Wrap the input_lock calls into ifdefs
Missing from a790ff35f9
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
diff --git a/src/xf86libinput.c b/src/xf86libinput.c
index 061e495..24219a6 100644
--- a/src/xf86libinput.c
+++ b/src/xf86libinput.c
@@ -1158,12 +1158,20 @@ swap_registered_device(InputInfoPtr pInfo)
while (next == pInfo || !is_libinput_device(next))
next = next->next;
+#if HAVE_THREADED_INPUT
input_lock();
+#else
+ int sigstate = xf86BlockSIGIO();
+#endif
xf86RemoveEnabledDevice(pInfo);
if (next) /* shouldn't ever be NULL anyway */
xf86AddEnabledDevice(next);
driver_context.registered_InputInfoPtr = next;
+#if HAVE_THREADED_INPUT
input_unlock();
+#else
+ xf86UnblockSIGIO(sigstate);
+#endif
}
static void
commit c80954386d536b83f2c9290e1a88515c04505818
Author: Peter Hutterer <peter.hutterer@who-t.net>
Date: Wed Oct 19 09:24:37 2016 +1000
xf86-input-libinput 0.21.0
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
diff --git a/configure.ac b/configure.ac
index a1f80fe..3fad444 100644
--- a/configure.ac
+++ b/configure.ac
@@ -23,7 +23,7 @@
# Initialize Autoconf
AC_PREREQ([2.60])
AC_INIT([xf86-input-libinput],
- [0.20.0],
+ [0.21.0],
[https://bugs.freedesktop.org/enter_bug.cgi?product=xorg],
[xf86-input-libinput])
AC_CONFIG_SRCDIR([Makefile.am])
commit a790ff35f90e459fe03e0c78ab6f4e9dd5045dd0
Author: Peter Hutterer <peter.hutterer@who-t.net>
Date: Fri Oct 14 17:00:41 2016 +1000
Swap the registered input device on DEVICE_OFF when needed
If we don't swap out the pInfo previously passed to xf86AddEnabledDevice(),
the thread eventually calls read_input on a struct that has been deleted.
Avoid this by swapping out the to-be-destroyed pInfo with the first one we
find.
Reproducer: sudo udevadm trigger --type=devices --action=add
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Hans de Goede <hdegoede@redhat.com>
diff --git a/src/xf86libinput.c b/src/xf86libinput.c
index 69f7ae3..061e495 100644
--- a/src/xf86libinput.c
+++ b/src/xf86libinput.c
@@ -87,6 +87,7 @@
struct xf86libinput_driver {
struct libinput *libinput;
int device_enabled_count;
+ void *registered_InputInfoPtr;
};
static struct xf86libinput_driver driver_context;
@@ -583,6 +584,7 @@ xf86libinput_on(DeviceIntPtr dev)
if (driver_context.device_enabled_count == 0) {
#if HAVE_THREADED_INPUT
xf86AddEnabledDevice(pInfo);
+ driver_context.registered_InputInfoPtr = pInfo;
#else
/* Can't use xf86AddEnabledDevice on an epollfd */
AddEnabledDevice(pInfo->fd);
@@ -1131,6 +1133,39 @@ xf86libinput_init(DeviceIntPtr dev)
return 0;
}
+static bool
+is_libinput_device(InputInfoPtr pInfo)
+{
+ char *driver;
+ BOOL rc;
+
+ driver = xf86CheckStrOption(pInfo->options, "driver", "");
+ rc = strcmp(driver, "libinput") == 0;
+ free(driver);
+
+ return rc;
+}
+
+static void
+swap_registered_device(InputInfoPtr pInfo)
+{
+ InputInfoPtr next;
+
+ if (pInfo != driver_context.registered_InputInfoPtr)
+ return;
+
+ next = xf86FirstLocalDevice();
+ while (next == pInfo || !is_libinput_device(next))
+ next = next->next;
+
+ input_lock();
+ xf86RemoveEnabledDevice(pInfo);
+ if (next) /* shouldn't ever be NULL anyway */
+ xf86AddEnabledDevice(next);
+ driver_context.registered_InputInfoPtr = next;
+ input_unlock();
+}
+
static void
xf86libinput_destroy(DeviceIntPtr dev)
{
@@ -1138,6 +1173,17 @@ xf86libinput_destroy(DeviceIntPtr dev)
struct xf86libinput *driver_data = pInfo->private;
struct xf86libinput_device *shared_device = driver_data->shared_device;
+ /* If the device being destroyed is the one we used for
+ * xf86AddEnabledDevice(), we need to swap it out for one that is
+ * still live. xf86AddEnabledDevice() buffers some data and once the
+ * deletes pInfo (when DEVICE_OFF completes) the thread will keep
+ * calling that struct's read_input because we never removed it.
+ * Avoid this by removing ours and substituting one that's still
+ * valid, the fd is the same anyway (libinput's epollfd).
+ */
+ if (driver_context.device_enabled_count > 0)
+ swap_registered_device(pInfo);
+
xorg_list_del(&driver_data->shared_device_link);
if (driver_data->tablet_tool)
commit 6318ac420b644c7f7a6f2c8e47a64238a4afebeb
Author: Peter Hutterer <peter.hutterer@who-t.net>
Date: Fri Oct 14 13:34:56 2016 +1000
Fix tap button map option handling
Copy/paste error
https://bugs.freedesktop.org/show_bug.cgi?id=97989
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
diff --git a/src/xf86libinput.c b/src/xf86libinput.c
index 21f87f5..69f7ae3 100644
--- a/src/xf86libinput.c
+++ b/src/xf86libinput.c
@@ -2146,10 +2146,10 @@ xf86libinput_parse_tap_buttonmap_option(InputInfoPtr pInfo,
free(str);
}
- if (libinput_device_config_send_events_set_mode(device, map) !=
+ if (libinput_device_config_tap_set_button_map(device, map) !=
LIBINPUT_CONFIG_STATUS_SUCCESS) {
xf86IDrvMsg(pInfo, X_ERROR,
- "Failed to set Tapping Drag Lock to %d\n",
+ "Failed to set Tapping Button Map to %d\n",
map);
map = libinput_device_config_tap_get_button_map(device);
}
Reply to: