Currently each thread can requrest to be notified when it's parent terminates, and receive a thread specific signal when that occurs. That we set this on a per thread granularity and then send it to the whole thread group seems silly, but whatever.
Currently we send a signal when the results of getppid don't change if our parent thread dies and we are reparented to a different thread. This seems counterintuitive to what I would expect when programming in user space and is a major maitenance issue to continue doing. The only users I recall using this have non threaded parents and pdeath_signal predates CLONE_THREAD so arguably this code has been broken with threaded parents since the day CLONE_THREAD was introduced and no one ever screamed loudly enough to get it fixed. So this patch fixes the pdeath_signal behaviour only sending a signal when the results of getppid would change. Signed-off-by: Eric W. Biederman <[EMAIL PROTECTED]> --- This patch is against 2.6.21-rc6-mm1 (with utrace applied) but except for context in the diff that should not matter. kernel/exit.c | 8 ++++---- 1 files changed, 4 insertions(+), 4 deletions(-) diff --git a/kernel/exit.c b/kernel/exit.c index 1d91de8..1ec0d1f 100644 --- a/kernel/exit.c +++ b/kernel/exit.c @@ -618,10 +618,6 @@ choose_new_parent(struct task_struct *p, struct task_struct *reaper) static void reparent_thread(struct task_struct *p, struct task_struct *father) { - if (p->pdeath_signal) - /* We already hold the tasklist_lock here. */ - group_send_sig_info(p->pdeath_signal, SEND_SIG_NOINFO, p); - /* Move the child from its dying parent to the new one. */ list_move_tail(&p->sibling, &p->parent->children); @@ -635,6 +631,10 @@ reparent_thread(struct task_struct *p, struct task_struct *father) if (p->exit_signal != -1) p->exit_signal = SIGCHLD; + if (p->pdeath_signal) + /* We already hold the tasklist_lock here. */ + group_send_sig_info(p->pdeath_signal, SEND_SIG_NOINFO, p); + /* If we'd notified the old parent about this child's death, * also notify the new parent. */ -- 1.5.0.g53756 - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/