summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDarren Tucker <dtucker@dtucker.net>2020-05-08 21:50:43 +1000
committerDarren Tucker <dtucker@dtucker.net>2020-05-08 21:50:43 +1000
commit4fa9e048c2af26beb7dc2ee9479ff3323e92a7b5 (patch)
treec8ae4e29d16258eab9b866454ff6f0cbec01220d
parentdc2da29aae76e170d22f38bb36f1f5d1edd5ec2b (diff)
Ensure SA_SIGNAL test only signals itself.
When the test's child signals its parent and it exits the result of getppid changes. On Ubuntu 20.04 this results in the ppid being that of the GDM session, causing it to exit. Analysis and testing from pedro at ambientworks.net
-rw-r--r--configure.ac6
1 files changed, 4 insertions, 2 deletions
diff --git a/configure.ac b/configure.ac
index 3712d55d..003b235e 100644
--- a/configure.ac
+++ b/configure.ac
@@ -2534,10 +2534,12 @@ static void sighandler(int sig) { }
sa.sa_flags = SA_RESTART;
(void)sigaction(SIGTERM, &sa, NULL);
if ((pid = fork()) == 0) { /* child */
+ pid = getppid();
sleep(1);
- kill(getppid(), SIGTERM);
+ kill(pid, SIGTERM);
sleep(1);
- kill(getppid(), SIGKILL);
+ if (getppid() == pid) /* if parent did not exit, shoot it */
+ kill(pid, SIGKILL);
exit(0);
} else { /* parent */
r = select(0, NULL, NULL, NULL, NULL);