diff options
author | Peter Hutterer <peter.hutterer@who-t.net> | 2017-02-23 09:47:27 +1000 |
---|---|---|
committer | Jason Gerecke <killertofu@gmail.com> | 2017-02-24 15:18:49 -0800 |
commit | f65d97362813ea89d18e5049ad87bc468ec30f85 (patch) | |
tree | d26b2f260d360a75dad2d810b7f3466bb1a8682c | |
parent | 23f9586779f94cacb899120ef426d8fcd1647dcb (diff) | |
download | xf86-input-wacom-f65d97362813ea89d18e5049ad87bc468ec30f85.tar.gz |
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>
Acked-by: Jason Gerecke <jason.gerecke@wacom.com>
-rw-r--r-- | src/wcmXCommand.c | 29 |
1 files 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 |