Messages in this thread |  | | | Date | Tue, 4 Mar 2008 18:51:13 +0300 | | From | Oleg Nesterov <> | | Subject | Re: [PATCH 0/3] orphaned pgrp fixes |
| |
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.
|  |