Messages in this thread | | | Subject | Re: [PATCH] fix send_sigqueue() vs thread exit race | From | Thomas Gleixner <> | Date | Mon, 22 Aug 2005 10:08:47 +0200 |
| |
On Mon, 2005-08-22 at 10:39 +0400, Oleg Nesterov wrote: > Thomas Gleixner wrote: > > > > @@ -1427,7 +1434,18 @@ send_group_sigqueue(int sig, struct sigq > > int ret = 0; > > > > BUG_ON(!(q->flags & SIGQUEUE_PREALLOC)); > > - read_lock(&tasklist_lock); > > +retry: > > + if (unlikely(p->flags & PF_EXITING)) > > + return -1; > > + > > I don't think this is correct. p == ->group_leader, it may > have been exited and in EXIT_ZOMBIE state. But the thread > group (process) is live, we should not stop posix timers.
Hmm, true. release_task() is not called in this case, so p->sighand is still there.
But we can not check for p->sighand == NULL, as sighand is released after exit_itimers() so we are still deadlock prone. So I think __exit_sighand() should be called before exit_itimers(). Then we can do
retry: if (unlikely(!p->sighand)) return -1;
instead of checking for PF_EXITING.
tglx
- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |