Re: [PATCH] fix TASK_STOPPED vs TASK_NONINTERACTIVE interaction

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 




On Fri, 30 Sep 2005, Oleg Nesterov wrote:
>
> Roland, could you please explain this code in wait_task_stopped()
> 
> 	if (!exit_code || p->state > TASK_STOPPED)
> 		goto bail_ref;

Regardless of any other explanations, it turns out that "p->state" can be 
something like "TASK_RUNNING | TASK_NONINTERACTIVE", and then this would 
trigger totally incorrectly.

> It looks like "WSTOPPED | WNOWAIT is illegal for TASK_TRACED child"
> to me. Is this correct? I think no.

No, I think it's correct. If you have a traced child, you can't just wait 
for it. You need to use ptrace to release it first.

> Actually, I don't understand why we are checking p->state at all, we
> already dropped tasklist_lock, the state can change at any monent.

If it's TASK_TRACED, and it's our child, then it shouldn't be changing. 

Besides, even if it does, we had a perfectly fine race, and we'll have 
been woken up again and we'll just go through the do_wait() loop once 
more.

So I think the code is mostly correct. But that ">" is definitely 
incorrect.

Maybe it should just be

	if (!exit_code || (p->state & TASK_TRACED))

instead?

Roland?

		Linus
-
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/

[Index of Archives]     [Kernel Newbies]     [Netfilter]     [Bugtraq]     [Photo]     [Gimp]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Video 4 Linux]     [Linux for the blind]
  Powered by Linux