From: Ulrich Drepper Date: Mon, 6 Oct 2008 16:47:10 +0000 (+0000) Subject: * sysdeps/unix/sysv/linux/fork.c (__libc_fork): Add memory barrier X-Git-Tag: cvs/fedora-glibc-20081019T1815~9 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=af62b44029c208376086940976cc386c9921f086;p=thirdparty%2Fglibc.git * sysdeps/unix/sysv/linux/fork.c (__libc_fork): Add memory barrier to force runp->refcntr to be read from memory. --- diff --git a/ChangeLog b/ChangeLog index 9dd19f1575c..8a37b4a0fa9 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2008-09-11 Martin Schwidefsky + + * sysdeps/unix/sysv/linux/fork.c (__libc_fork): Add memory barrier + to force runp->refcntr to be read from memory. + 2008-09-18 Andreas Schwab [BZ #6942] diff --git a/nptl/sysdeps/unix/sysv/linux/fork.c b/nptl/sysdeps/unix/sysv/linux/fork.c index 1683de80fdf..524d72c5874 100644 --- a/nptl/sysdeps/unix/sysv/linux/fork.c +++ b/nptl/sysdeps/unix/sysv/linux/fork.c @@ -1,4 +1,4 @@ -/* Copyright (C) 2002, 2003, 2007 Free Software Foundation, Inc. +/* Copyright (C) 2002, 2003, 2007, 2008 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper , 2002. @@ -64,6 +64,9 @@ __libc_fork (void) struct fork_handler *runp; while ((runp = __fork_handlers) != NULL) { + /* Make sure we read from the current RUNP pointer. */ + atomic_full_barrier (); + unsigned int oldval = runp->refcntr; if (oldval == 0)