xorg-x11-drv-wacom/0001-Revert-to-update-properties-with-a-timer-func.patch
2017-02-23 09:51:12 +10:00

109 lines
2.9 KiB
Diff

From cd53371e9a4a7ea64ba805dafa92f2e48528a938 Mon Sep 17 00:00:00 2001
From: Peter Hutterer <peter.hutterer@who-t.net>
Date: Thu, 23 Feb 2017 09:33:24 +1000
Subject: [PATCH] Revert to update properties with a timer func
This was required when we only had the SIGIO handler because sending events
allocates memory and things break. Now with the input thread we *can* send
events from within the thread but it can mess up other delivery.
https://bugs.freedesktop.org/show_bug.cgi?id=99887
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
---
src/wcmXCommand.c | 29 +++++++++++++----------------
1 file changed, 13 insertions(+), 16 deletions(-)
diff --git a/src/wcmXCommand.c b/src/wcmXCommand.c
index df7fcea..0e1d657 100644
--- a/src/wcmXCommand.c
+++ b/src/wcmXCommand.c
@@ -656,20 +656,22 @@ wcmSetHWTouchProperty(InputInfoPtr pInfo)
prop->size, &prop_value, TRUE);
}
-#if !HAVE_THREADED_INPUT
static CARD32
touchTimerFunc(OsTimerPtr timer, CARD32 now, pointer arg)
{
InputInfoPtr pInfo = arg;
+#if !HAVE_THREADED_INPUT
int sigstate = xf86BlockSIGIO();
+#endif
wcmSetHWTouchProperty(pInfo);
+#if !HAVE_THREADED_INPUT
xf86UnblockSIGIO(sigstate);
+#endif
return 0;
}
-#endif
/**
* Update HW touch property when its state is changed by touch switch
@@ -684,14 +686,10 @@ wcmUpdateHWTouchProperty(WacomDevicePtr priv, int hw_touch)
common->wcmHWTouchSwitchState = hw_touch;
-#if HAVE_THREADED_INPUT
- wcmSetHWTouchProperty(priv->pInfo);
-#else
- /* This function is called during SIGIO. Schedule timer for property
- * event delivery outside of signal handler. */
+ /* This function is called during SIGIO/InputThread. Schedule timer
+ * for property event delivery by the main thread. */
priv->touch_timer = TimerSet(priv->touch_timer, 0 /* reltime */,
1, touchTimerFunc, priv->pInfo);
-#endif
}
/**
@@ -1074,20 +1072,23 @@ wcmSetSerialProperty(InputInfoPtr pInfo)
prop->size, prop_value, TRUE);
}
-#if !HAVE_THREADED_INPUT
static CARD32
serialTimerFunc(OsTimerPtr timer, CARD32 now, pointer arg)
{
InputInfoPtr pInfo = arg;
+
+#if !HAVE_THREADED_INPUT
int sigstate = xf86BlockSIGIO();
+#endif
wcmSetSerialProperty(pInfo);
+#if !HAVE_THREADED_INPUT
xf86UnblockSIGIO(sigstate);
+#endif
return 0;
}
-#endif
void
wcmUpdateSerial(InputInfoPtr pInfo, unsigned int serial, int id)
@@ -1100,14 +1101,10 @@ wcmUpdateSerial(InputInfoPtr pInfo, unsigned int serial, int id)
priv->cur_serial = serial;
priv->cur_device_id = id;
-#if HAVE_THREADED_INPUT
- wcmSetSerialProperty(pInfo);
-#else
- /* This function is called during SIGIO. Schedule timer for property
- * event delivery outside of signal handler. */
+ /* This function is called during SIGIO/InputThread. Schedule timer
+ * for property event delivery by the main thread. */
priv->serial_timer = TimerSet(priv->serial_timer, 0 /* reltime */,
1, serialTimerFunc, pInfo);
-#endif
}
static void
--
2.9.3