tracehook: death
This moves the ptrace logic in task death (exit_notify) into tracehook.h inlines. Some code is rearranged slightly to make things nicer. There is no change, only cleanup. There is one hook called with the tasklist_lock write-locked, as ptrace needs. There is also a new hook called after exit_state changes and without locks. This is a better place for tracing work to be in the future, since it doesn't delay the whole system with locking. Signed-off-by: Roland McGrath <roland@redhat.com> Cc: Oleg Nesterov <oleg@tv-sign.ru> Reviewed-by: Ingo Molnar <mingo@elte.hu> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
committed by
Linus Torvalds
parent
fa00b80b3c
commit
2b2a1ff64a
@@ -1326,9 +1326,11 @@ static inline void __wake_up_parent(struct task_struct *p,
|
||||
/*
|
||||
* Let a parent know about the death of a child.
|
||||
* For a stopped/continued status change, use do_notify_parent_cldstop instead.
|
||||
*
|
||||
* Returns -1 if our parent ignored us and so we've switched to
|
||||
* self-reaping, or else @sig.
|
||||
*/
|
||||
|
||||
void do_notify_parent(struct task_struct *tsk, int sig)
|
||||
int do_notify_parent(struct task_struct *tsk, int sig)
|
||||
{
|
||||
struct siginfo info;
|
||||
unsigned long flags;
|
||||
@@ -1399,12 +1401,14 @@ void do_notify_parent(struct task_struct *tsk, int sig)
|
||||
*/
|
||||
tsk->exit_signal = -1;
|
||||
if (psig->action[SIGCHLD-1].sa.sa_handler == SIG_IGN)
|
||||
sig = 0;
|
||||
sig = -1;
|
||||
}
|
||||
if (valid_signal(sig) && sig > 0)
|
||||
__group_send_sig_info(sig, &info, tsk->parent);
|
||||
__wake_up_parent(tsk, tsk->parent);
|
||||
spin_unlock_irqrestore(&psig->siglock, flags);
|
||||
|
||||
return sig;
|
||||
}
|
||||
|
||||
static void do_notify_parent_cldstop(struct task_struct *tsk, int why)
|
||||
|
Reference in New Issue
Block a user