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.hutte...@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


------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, SlashDot.org! http://sdm.link/slashdot
_______________________________________________
Linuxwacom-devel mailing list
Linuxwacom-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linuxwacom-devel

Reply via email to