• Oleg Nesterov's avatar
    exit_notify: fix kill_orphaned_pgrp() usage with mt exit · 821c7de7
    Oleg Nesterov authored
    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: default avatarOleg Nesterov <oleg@tv-sign.ru>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    821c7de7
exit.c 41.5 KB