Issue #26406: Avoid unnecessary serialization of getaddrinfo(3) calls on

current versions of OpenBSD and NetBSD.  Patch by A. Jesse Jiryu Davis.
This commit is contained in:
Ned Deily 2016-02-23 22:05:29 +11:00
parent f1d371bde9
commit e1d4e58777
2 changed files with 13 additions and 4 deletions

View File

@ -227,6 +227,9 @@ Library
- Issue #25924: Avoid unnecessary serialization of getaddrinfo(3) calls on - Issue #25924: Avoid unnecessary serialization of getaddrinfo(3) calls on
OS X versions 10.5 or higher. Original patch by A. Jesse Jiryu Davis. OS X versions 10.5 or higher. Original patch by A. Jesse Jiryu Davis.
- Issue #26406: Avoid unnecessary serialization of getaddrinfo(3) calls on
current versions of OpenBSD and NetBSD. Patch by A. Jesse Jiryu Davis.
Documentation Documentation
------------- -------------

View File

@ -184,7 +184,7 @@ if_indextoname(index) -- return the corresponding interface name\n\
# define USE_GETHOSTBYNAME_LOCK # define USE_GETHOSTBYNAME_LOCK
#endif #endif
/* To use __FreeBSD_version */ /* To use __FreeBSD_version, __OpenBSD__, and __NetBSD_Version__ */
#ifdef HAVE_SYS_PARAM_H #ifdef HAVE_SYS_PARAM_H
#include <sys/param.h> #include <sys/param.h>
#endif #endif
@ -195,15 +195,21 @@ if_indextoname(index) -- return the corresponding interface name\n\
a mix of code including an unsafe implementation from an old BSD's a mix of code including an unsafe implementation from an old BSD's
libresolv. In 10.5 Apple reimplemented it as a safe IPC call to the libresolv. In 10.5 Apple reimplemented it as a safe IPC call to the
mDNSResponder process. 10.5 is the first be UNIX '03 certified, which mDNSResponder process. 10.5 is the first be UNIX '03 certified, which
includes the requirement that getaddrinfo be thread-safe. includes the requirement that getaddrinfo be thread-safe. See issue #25924.
See issue #25924 for details. It's thread-safe in OpenBSD starting with 5.4, released Nov 2013:
http://www.openbsd.org/plus54.html
It's thread-safe in NetBSD starting with 4.0, released Dec 2007:
http://cvsweb.netbsd.org/bsdweb.cgi/src/lib/libc/net/getaddrinfo.c.diff?r1=1.82&r2=1.83
*/ */
#if defined(WITH_THREAD) && ( \ #if defined(WITH_THREAD) && ( \
(defined(__APPLE__) && \ (defined(__APPLE__) && \
MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_5) || \ MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_5) || \
(defined(__FreeBSD__) && __FreeBSD_version+0 < 503000) || \ (defined(__FreeBSD__) && __FreeBSD_version+0 < 503000) || \
defined(__OpenBSD__) || defined(__NetBSD__) || \ (defined(__OpenBSD__) && OpenBSD+0 < 201311) || \
(defined(__NetBSD__) && __NetBSD_Version__+0 < 400000000) || \
!defined(HAVE_GETADDRINFO)) !defined(HAVE_GETADDRINFO))
#define USE_GETADDRINFO_LOCK #define USE_GETADDRINFO_LOCK
#endif #endif