* nss/getXXbyYY_r.c: Include atomic.h.

(INTERNAL (REENTRANT_NAME)): Write startp after start_fct,
	add atomic_write_barrier () in between.
This commit is contained in:
Ulrich Drepper 2006-12-19 15:45:39 +00:00
parent a12dcecc50
commit 4490149516
2 changed files with 11 additions and 4 deletions

View File

@ -1,5 +1,9 @@
2006-12-19 Jakub Jelinek <jakub@redhat.com> 2006-12-19 Jakub Jelinek <jakub@redhat.com>
* nss/getXXbyYY_r.c: Include atomic.h.
(INTERNAL (REENTRANT_NAME)): Write startp after start_fct,
add atomic_write_barrier () in between.
* stdlib/Makefile (tests): Add tst-makecontext. * stdlib/Makefile (tests): Add tst-makecontext.
* stdlib/tst-makecontext.c: New test. * stdlib/tst-makecontext.c: New test.

View File

@ -1,4 +1,4 @@
/* Copyright (C) 1996-2002, 2003, 2004 Free Software Foundation, Inc. /* Copyright (C) 1996-2002, 2003, 2004, 2006 Free Software Foundation, Inc.
This file is part of the GNU C Library. This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996. Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996.
@ -18,6 +18,7 @@
02111-1307 USA. */ 02111-1307 USA. */
#include <assert.h> #include <assert.h>
#include <atomic.h>
#include <errno.h> #include <errno.h>
#include <stdbool.h> #include <stdbool.h>
#include "nsswitch.h" #include "nsswitch.h"
@ -173,9 +174,6 @@ INTERNAL (REENTRANT_NAME) (ADD_PARAMS, LOOKUP_TYPE *resbuf, char *buffer,
startp = (service_user *) -1l; startp = (service_user *) -1l;
else else
{ {
startp = nip;
start_fct = fct.l;
#ifdef NEED__RES #ifdef NEED__RES
/* The resolver code will really be used so we have to /* The resolver code will really be used so we have to
initialize it. */ initialize it. */
@ -190,6 +188,11 @@ INTERNAL (REENTRANT_NAME) (ADD_PARAMS, LOOKUP_TYPE *resbuf, char *buffer,
if (!_res_hconf.initialized) if (!_res_hconf.initialized)
_res_hconf_init (); _res_hconf_init ();
#endif /* need _res_hconf */ #endif /* need _res_hconf */
start_fct = fct.l;
/* Make sure start_fct is written before startp. */
atomic_write_barrier ();
startp = nip;
} }
} }
else else