Re: [PATCH 0/3] orphaned pgrp fixes

From: Oleg Nesterov
Date: Tue Mar 04 2008 - 10:47:48 EST


On 03/04, Roland McGrath wrote:
>
> [... big snip...]

Thanks Roland. I need a time to understand your explanation (I even printed
it to read in metro ;). I'll return tomorrow.

A quick note right now:

> static int group_is_really_stopped(struct task_struct *p)
> {
> int ret = 0;
> spin_lock(&p->sighand->siglock);
> ret = (p->signal->flags & (SIGNAL_STOP_STOPPING|SIGNAL_STOP_STOPPED)) ||
> p->signal->group_stop_count > 0;
> spin_unlock(&p->sighand->siglock);
> return ret;
> }

I thought abot something like that too.

However, SIGNAL_STOP_STOPPED doesn't relaible with ptrace. I mean, ptracer
doesn't clear SIGNAL_STOP_STOPPED. This is btw one of the problems which
complicates fixing do_wait(WSTOPPED).

As for SIGNAL_STOP_STOPPING... I am dreaming to find the way to eliminate
this lock-drop in get_signal_to_deliver(). Not sure this is possible, but
it is so nasty. For example, SIGNAL_STOP_DEQUEUED is racy, and I don't know
how to fix this. The patch we discussed some time ago doesn't really work
because dequeue_signal() drops the lock too. The latter is fixable afaics,
but needs very ugly changes.

Oleg.

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/