diff options
author | Darren Tucker <dtucker@dtucker.net> | 2020-05-08 21:50:43 +1000 |
---|---|---|
committer | Darren Tucker <dtucker@dtucker.net> | 2020-05-08 21:50:43 +1000 |
commit | 4fa9e048c2af26beb7dc2ee9479ff3323e92a7b5 (patch) | |
tree | c8ae4e29d16258eab9b866454ff6f0cbec01220d | |
parent | dc2da29aae76e170d22f38bb36f1f5d1edd5ec2b (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.ac | 6 |
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); |