[COMMITTED] Fix wake-up in sysdeps/nptl/fork.c.

Message ID 1421108640.23151.20.camel@triegel.csb
State Committed
Headers

Commit Message

Torvald Riegel Jan. 13, 2015, 12:24 a.m. UTC
  Committed this as obvious.  The futex wake-up needs the address of the
futex variable, not the value.  I've searched glibc bugs for "fork", but
didn't see a bug that seemed to be likely to be related to this.


2015-01-13  Torvald Riegel  <triegel@redhat.com>

        * sysdeps/nptl/fork.c (__libc_fork): Provide address of futex
        variable to lll_futex_wake call, not the value itself.
  

Comments

Roland McGrath Jan. 13, 2015, 6:37 p.m. UTC | #1
> Committed this as obvious.  The futex wake-up needs the address of the
> futex variable, not the value.  

Yowza!  That's a sure sign that we really need this cleanup to demacroify
this stuff and get proper type checking.

> I've searched glibc bugs for "fork", but
> didn't see a bug that seemed to be likely to be related to this.

The failure mode would be a hang at exit, which is not too likely to be
characterized in a user bug report in a way that would be easy to find.
  

Patch

diff --git a/sysdeps/nptl/fork.c b/sysdeps/nptl/fork.c
index 5cffd82..74482b7 100644
--- a/sysdeps/nptl/fork.c
+++ b/sysdeps/nptl/fork.c
@@ -219,7 +219,7 @@  __libc_fork (void)
 
 	  if (atomic_decrement_and_test (&allp->handler->refcntr)
 	      && allp->handler->need_signal)
-	    lll_futex_wake (allp->handler->refcntr, 1, LLL_PRIVATE);
+	    lll_futex_wake (&allp->handler->refcntr, 1, LLL_PRIVATE);
 
 	  allp = allp->next;
 	}