diff options
| author | David Woodhouse <David.Woodhouse@intel.com> | 2008-07-11 14:36:25 +0100 | 
|---|---|---|
| committer | David Woodhouse <David.Woodhouse@intel.com> | 2008-07-11 14:36:25 +0100 | 
| commit | a8931ef380c92d121ae74ecfb03b2d63f72eea6f (patch) | |
| tree | 980fb6b019e11e6cb1ece55b7faff184721a8053 /kernel/exit.c | |
| parent | 90574d0a4d4b73308ae54a2a57a4f3f1fa98e984 (diff) | |
| parent | e5a5816f7875207cb0a0a7032e39a4686c5e10a4 (diff) | |
| download | olio-linux-3.10-a8931ef380c92d121ae74ecfb03b2d63f72eea6f.tar.xz olio-linux-3.10-a8931ef380c92d121ae74ecfb03b2d63f72eea6f.zip  | |
Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6
Diffstat (limited to 'kernel/exit.c')
| -rw-r--r-- | kernel/exit.c | 8 | 
1 files changed, 7 insertions, 1 deletions
diff --git a/kernel/exit.c b/kernel/exit.c index d3ad54677f9..8f6185e69b6 100644 --- a/kernel/exit.c +++ b/kernel/exit.c @@ -19,6 +19,7 @@  #include <linux/acct.h>  #include <linux/tsacct_kern.h>  #include <linux/file.h> +#include <linux/fdtable.h>  #include <linux/binfmts.h>  #include <linux/nsproxy.h>  #include <linux/pid_namespace.h> @@ -125,6 +126,12 @@ static void __exit_signal(struct task_struct *tsk)  	__unhash_process(tsk); +	/* +	 * Do this under ->siglock, we can race with another thread +	 * doing sigqueue_free() if we have SIGQUEUE_PREALLOC signals. +	 */ +	flush_sigqueue(&tsk->pending); +  	tsk->signal = NULL;  	tsk->sighand = NULL;  	spin_unlock(&sighand->siglock); @@ -132,7 +139,6 @@ static void __exit_signal(struct task_struct *tsk)  	__cleanup_sighand(sighand);  	clear_tsk_thread_flag(tsk,TIF_SIGPENDING); -	flush_sigqueue(&tsk->pending);  	if (sig) {  		flush_sigqueue(&sig->shared_pending);  		taskstats_tgid_free(sig);  |