aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorLaxmi Devi <Laxmi.Devi@in.bosch.com>2018-05-24 15:04:23 +0530
committerDavid Robillard <d@drobilla.net>2018-09-20 10:30:26 +0200
commit399a5586a60b81daf483d543adefd025e705c6ed (patch)
treedbd549d12a1a338d55ccfe4d104a9782d0a18965 /src
parent43dd0b6fd560f97e2584364593c5e44f2262c281 (diff)
downloadjalv-399a5586a60b81daf483d543adefd025e705c6ed.tar.gz
jalv-399a5586a60b81daf483d543adefd025e705c6ed.tar.bz2
jalv-399a5586a60b81daf483d543adefd025e705c6ed.zip
Use sigaction() instead of signal()
Issue is that even after ctrl+c, fgets is waiting for a newline. See signal(7) for details. We have to either use siginterrupt() together with signal(), or use sigaction() instead of signal() for registering the signal handler, in order to disable restarting a read() system call after a signal. Signed-off-by: Laxmi Devi <Laxmi.Devi@in.bosch.com> Signed-off-by: Timo Wischer <twischer@de.adit-jv.com>
Diffstat (limited to 'src')
-rw-r--r--src/jalv.c10
1 files changed, 10 insertions, 0 deletions
diff --git a/src/jalv.c b/src/jalv.c
index b95e7d4..d25a8b2 100644
--- a/src/jalv.c
+++ b/src/jalv.c
@@ -878,8 +878,18 @@ main(int argc, char** argv)
zix_sem_init(&jalv.paused, 0);
zix_sem_init(&jalv.worker.sem, 0);
+#ifdef HAVE_SIGACTION
+ struct sigaction action;
+ sigemptyset(&action.sa_mask);
+ action.sa_flags = 0;
+ action.sa_handler = signal_handler;
+ sigaction(SIGINT, &action, NULL);
+ sigaction(SIGTERM, &action, NULL);
+#else
+ /* May not work in combination with fgets in the console interface */
signal(SIGINT, signal_handler);
signal(SIGTERM, signal_handler);
+#endif
/* Find all installed plugins */
LilvWorld* world = lilv_world_new();