exit_notify: fix kill_orphaned_pgrp() usage with mt exit
authorOleg Nesterov <oleg@tv-sign.ru>
Sun, 2 Mar 2008 18:44:44 +0000 (21:44 +0300)
committerLinus Torvalds <torvalds@woody.linux-foundation.org>
Mon, 3 Mar 2008 22:53:16 +0000 (14:53 -0800)
commit821c7de7194e77afee1a69d50830a329a6d9af9f
tree6755cb5f57822c142b228ad8ca817c18b8f31884
parent05e83df624fe682bb8571cdb2c6d5284a99c3066
exit_notify: fix kill_orphaned_pgrp() usage with mt exit

1. exit_notify() always calls kill_orphaned_pgrp(). This is wrong, we
   should do this only when the whole process exits.

2. exit_notify() uses "current" as "ignored_task", obviously wrong.
   Use ->group_leader instead.

Test case:

void hup(int sig)
{
printf("HUP received\n");
}

void *tfunc(void *arg)
{
sleep(2);
printf("sub-thread exited\n");
return NULL;
}

int main(int argc, char *argv[])
{
if (!fork()) {
signal(SIGHUP, hup);
kill(getpid(), SIGSTOP);
exit(0);
}

pthread_t thr;
pthread_create(&thr, NULL, tfunc, NULL);

sleep(1);
printf("main thread exited\n");
syscall(__NR_exit, 0);

return 0;
}

output:

main thread exited
HUP received
Hangup

With this patch the output is:

main thread exited
sub-thread exited
HUP received

Signed-off-by: Oleg Nesterov <oleg@tv-sign.ru>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
kernel/exit.c