From be971a2b1c7828d94c41edd5cd22c1d9dcef1b6e Mon Sep 17 00:00:00 2001 From: Thomas Schwinge Date: Thu, 10 May 2012 14:50:14 -0700 Subject: [PATCH] Hurd: libc_once_get --- ChangeLog | 7 +++++++ bits/libc-lock.h | 5 ++++- nptl/ChangeLog | 5 +++++ nptl/sysdeps/pthread/bits/libc-lockP.h | 2 ++ sysdeps/mach/bits/libc-lock.h | 5 ++++- sysdeps/mach/hurd/bits/libc-lock.h | 5 ++++- sysdeps/posix/getaddrinfo.c | 2 +- 7 files changed, 27 insertions(+), 4 deletions(-) diff --git a/ChangeLog b/ChangeLog index 279fbd6..fea15ee 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,12 @@ 2012-05-10 Thomas Schwinge + [BZ #3748] + * bits/libc-lock.h (__libc_once_get): New macro. + * sysdeps/mach/bits/libc-lock.h: Likewise. + * sysdeps/mach/hurd/bits/libc-lock.h: Likewise. + * sysdeps/posix/getaddrinfo.c (getaddrinfo): Use __libc_once_get + instead of using implementation details. + * libio/fileops.c: Unconditionally include . * libio/freopen.c: Likewise. * libio/freopen64.c: Likewise. diff --git a/bits/libc-lock.h b/bits/libc-lock.h index 4f0029f..d7c49e7 100644 --- a/bits/libc-lock.h +++ b/bits/libc-lock.h @@ -1,5 +1,5 @@ /* libc-internal interface for mutex locks. Stub version. - Copyright (C) 1996,97,99,2000-2002,2003 Free Software Foundation, Inc. + Copyright (C) 1996-2012 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -97,6 +97,9 @@ } \ } while (0) +/* Get once control variable. */ +#define __libc_once_get(ONCE_CONTROL) \ + ((ONCE_CONTROL) == 1) /* Start a critical region with a cleanup function */ #define __libc_cleanup_region_start(DOIT, FCT, ARG) \ diff --git a/nptl/ChangeLog b/nptl/ChangeLog index 7e17ca0..905a6be 100644 --- a/nptl/ChangeLog +++ b/nptl/ChangeLog @@ -1,3 +1,8 @@ +2012-05-10 Thomas Schwinge + + [BZ #3748] + * sysdeps/pthread/bits/libc-lockP.h (__libc_once_get): New macro. + 2012-05-09 Chung-Lin Tang * sysdeps/unix/sysv/linux/sh/pthread_cond_timedwait.S diff --git a/nptl/sysdeps/pthread/bits/libc-lockP.h b/nptl/sysdeps/pthread/bits/libc-lockP.h index d08fb9d..0ebac91 100644 --- a/nptl/sysdeps/pthread/bits/libc-lockP.h +++ b/nptl/sysdeps/pthread/bits/libc-lockP.h @@ -257,6 +257,8 @@ typedef pthread_key_t __libc_key_t; } \ } while (0) +/* Get once control variable. */ +#define __libc_once_get(ONCE_CONTROL) ((ONCE_CONTROL) != PTHREAD_ONCE_INIT) /* Note that for I/O cleanup handling we are using the old-style cancel handling. It does not have to be integrated with C++ snce diff --git a/sysdeps/mach/bits/libc-lock.h b/sysdeps/mach/bits/libc-lock.h index 0a627e7..110e25e 100644 --- a/sysdeps/mach/bits/libc-lock.h +++ b/sysdeps/mach/bits/libc-lock.h @@ -1,5 +1,5 @@ /* libc-internal interface for mutex locks. Mach cthreads version. - Copyright (C) 1996,97,98,2000,01, 2002 Free Software Foundation, Inc. + Copyright (C) 1996-2012 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -115,6 +115,9 @@ struct __libc_once __libc_lock_unlock (ONCE_CONTROL.lock); \ } while (0) +/* Get once control variable. */ +#define __libc_once_get(ONCE_CONTROL) ((ONCE_CONTROL).done != 0) + #ifdef _LIBC /* We need portable names for some functions. E.g., when they are used as argument to __libc_cleanup_region_start. */ diff --git a/sysdeps/mach/hurd/bits/libc-lock.h b/sysdeps/mach/hurd/bits/libc-lock.h index af531da..d18a10c 100644 --- a/sysdeps/mach/hurd/bits/libc-lock.h +++ b/sysdeps/mach/hurd/bits/libc-lock.h @@ -1,5 +1,5 @@ /* libc-internal interface for mutex locks. Hurd version using Mach cthreads. - Copyright (C) 1996,97,98,2000,01, 2002, 2003 Free Software Foundation, Inc. + Copyright (C) 1996-2012 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -187,6 +187,9 @@ struct __libc_once __libc_lock_unlock (ONCE_CONTROL.lock); \ } while (0) +/* Get once control variable. */ +#define __libc_once_get(ONCE_CONTROL) ((ONCE_CONTROL).done != 0) + #ifdef _LIBC /* We need portable names for some functions. E.g., when they are used as argument to __libc_cleanup_region_start. */ diff --git a/sysdeps/posix/getaddrinfo.c b/sysdeps/posix/getaddrinfo.c index 1a023f9..2eca2ae 100644 --- a/sysdeps/posix/getaddrinfo.c +++ b/sysdeps/posix/getaddrinfo.c @@ -2604,7 +2604,7 @@ getaddrinfo (const char *name, const char *service, __libc_lock_define_initialized (static, lock); __libc_lock_lock (lock); - if (old_once && gaiconf_reload_flag) + if (__libc_once_get (old_once) && gaiconf_reload_flag) gaiconf_reload (); qsort_r (order, nresults, sizeof (order[0]), rfc3484_sort, &src); __libc_lock_unlock (lock); -- 2.7.4