lkml.org 
[lkml]   [2011]   [Jul]   [29]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
SubjectRe: [PATCH 3/8] vfork: make it killable
From
Date
On Wed, 2011-07-27 at 18:32 +0200, Oleg Nesterov wrote:

[...]

> static long clone_vfork_finish(struct task_struct *child,
> struct completion *vfork_done, long pid)
> {
> - freezer_do_not_count();
> - wait_for_completion(vfork_done);
> - freezer_count();
> + int killed = wait_for_completion_killable(vfork_done);
> +
> + if (killed) {
> + struct completion *steal = xchg(&child->vfork_done, NULL);
> + /* if we race with complete_vfork_done() we have to wait */
> + if (unlikely(!steal))
> + wait_for_completion(vfork_done);
> +
> + return -EINTR;
> + }

Hmm.. isn't this inherently racy anyway? Why go to the trouble of trying
to handle this race at all?



\
 
 \ /
  Last update: 2011-07-29 15:05    [from the cache]
©2003-2011 Jasper Spaans