Hi guys,
syndaemon goes into an infinite loop whenever it receives a SIGINT signal.
An explanation and a patch are proposed below.
In the file:
xenocara/driver/xf86-input-synaptics/tools/syndaemon.c
the program uses a signal handling function which in turn calls
kill(getpid(), signum), thus resulting in a loop.
This actually happens for all the signals: SIGHUP, SIGINT, SIGQUIT, SIGILL,
...
as they are all caught with the same signal_handler() function.
Under Linux the following flag would be set:
act.sa_flags = SA_ONESHOT;
and the handling function would run only once.
SA_ONESHOT is a (linux only?) obsolete equivalent to SA_RESETHAND.
The patch below replaces SA_ONESHOT with SA_RESETHAND and removes the
problem.
Cheers,
Luca
Index: driver/xf86-input-synaptics/tools/syndaemon.c
===================================================================
RCS file: /cvs/xenocara/driver/xf86-input-synaptics/tools/syndaemon.c,v
retrieving revision 1.5
diff -u -p -r1.5 syndaemon.c
--- driver/xf86-input-synaptics/tools/syndaemon.c 22 Jan 2017
09:54:53 -0000 1.5
+++ driver/xf86-input-synaptics/tools/syndaemon.c 24 Oct 2017
12:16:40 -0000
@@ -173,8 +173,8 @@ install_signal_handler(void)
sigemptyset(&set);
act.sa_handler = signal_handler;
act.sa_mask = set;
-#ifdef SA_ONESHOT
- act.sa_flags = SA_ONESHOT;
+#ifdef SA_RESETHAND
+ act.sa_flags = SA_RESETHAND;
#else
act.sa_flags = 0;
#endif