]> granicus.if.org Git - python/commitdiff
Issue #25924: Avoid unnecessary serialization of getaddrinfo(3) calls on OS X
authorNed Deily <nad@python.org>
Mon, 15 Feb 2016 05:51:24 +0000 (16:51 +1100)
committerNed Deily <nad@python.org>
Mon, 15 Feb 2016 05:51:24 +0000 (16:51 +1100)
versions 10.5 or higher.  Original patch by A. Jesse Jiryu Davis.

Misc/NEWS
Modules/socketmodule.c

index f1e5e164cb3fab50b956cf65e0d712b31854f0e4..b54809068c58eed47a2824ad9a397ee7375d31f7 100644 (file)
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -112,6 +112,9 @@ Library
 
 - Issue #23914: Fixed SystemError raised by CPickle unpickler on broken data.
 
+- Issue #25924: Avoid unnecessary serialization of getaddrinfo(3) calls on
+  OS X versions 10.5 or higher.  Original patch by A. Jesse Jiryu Davis..
+
 Tests
 -----
 
index ced93433e57a0567db54a92e759dd5a02cc32f02..c02c5d97880e26bded161fd333d6f720a4c34e4f 100644 (file)
@@ -82,6 +82,11 @@ Local naming conventions:
 */
 
 #ifdef __APPLE__
+#include <AvailabilityMacros.h>
+/* for getaddrinfo thread safety test on old versions of OS X */
+#ifndef MAC_OS_X_VERSION_10_5
+#define MAC_OS_X_VERSION_10_5 1050
+#endif
   /*
    * inet_aton is not available on OSX 10.3, yet we want to use a binary
    * that was build on 10.4 or later to work on that release, weak linking
@@ -183,8 +188,19 @@ shutdown(how) -- shut down traffic in one or both directions\n\
 #include <sys/param.h>
 #endif
 /* On systems on which getaddrinfo() is believed to not be thread-safe,
-   (this includes the getaddrinfo emulation) protect access with a lock. */
-#if defined(WITH_THREAD) && (defined(__APPLE__) || \
+   (this includes the getaddrinfo emulation) protect access with a lock.
+
+   getaddrinfo is thread-safe on Mac OS X 10.5 and later. Originally it was
+   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
+   mDNSResponder process. 10.5 is the first be UNIX '03 certified, which
+   includes the requirement that getaddrinfo be thread-safe.
+
+   See issue #25924 for details.
+ */
+#if defined(WITH_THREAD) && ( \
+    (defined(__APPLE__) && \
+        MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_5) || \
     (defined(__FreeBSD__) && __FreeBSD_version+0 < 503000) || \
     defined(__OpenBSD__) || defined(__NetBSD__) || \
     defined(__VMS) || !defined(HAVE_GETADDRINFO))