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
This commit is contained in:
Darren Tucker 2020-05-08 21:50:43 +10:00
parent dc2da29aae
commit 4fa9e048c2
1 changed files with 4 additions and 2 deletions

View File

@ -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);