diff options
| author | Ingo Molnar <mingo@elte.hu> | 2002-09-09 21:06:13 -0700 |
|---|---|---|
| committer | Ingo Molnar <mingo@elte.hu> | 2002-09-09 21:06:13 -0700 |
| commit | 0d8b3b444a5bd3cde29d0670597f54df4ba1affa (patch) | |
| tree | 37690eabd6e1b09a31ba33722176f7aa6147d7d9 /include/linux | |
| parent | 8fb345bd33f2a6f22fe1a645d29d7c6dc429b51a (diff) | |
[PATCH] Re: do_syslog/__down_trylock lockup in current BK
This fixes the lockup.
The bug happened because reparenting in the CLONE_THREAD case was done in
a fundamentally non-atomic way, which was asking for various races to
happen: eg. the target parent gets reparented to the currently exiting
thread ...
(the non-CLONE_THREAD case is safe because nothing reparents init.)
the solution is to make all of reparenting atomic (including the
forget_original_parent() bit) - this is possible with some reorganization
done in signal.c and exit.c. This also made some of the loops simpler.
Diffstat (limited to 'include/linux')
| -rw-r--r-- | include/linux/sched.h | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/include/linux/sched.h b/include/linux/sched.h index bd7073fdefaf..600035a0b715 100644 --- a/include/linux/sched.h +++ b/include/linux/sched.h @@ -547,6 +547,7 @@ extern void block_all_signals(int (*notifier)(void *priv), void *priv, extern void unblock_all_signals(void); extern int send_sig_info(int, struct siginfo *, struct task_struct *); extern int force_sig_info(int, struct siginfo *, struct task_struct *); +extern int __kill_pg_info(int sig, struct siginfo *info, pid_t pgrp); extern int kill_pg_info(int, struct siginfo *, pid_t); extern int kill_sl_info(int, struct siginfo *, pid_t); extern int kill_proc_info(int, struct siginfo *, pid_t); |
