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 [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/