From 1fe492e303ea029960bad9e50afc36dc7e8fe735 Mon Sep 17 00:00:00 2001 From: Adam Dickmeiss Date: Thu, 1 Oct 2009 21:45:52 +0200 Subject: [PATCH] Do not use gethostbyname in threaded resolver Only use threaded resolver when getaddrinfo is found by configure. --- src/getaddrinfo.c | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/getaddrinfo.c b/src/getaddrinfo.c index 01cb15b..4718f5b 100644 --- a/src/getaddrinfo.c +++ b/src/getaddrinfo.c @@ -51,6 +51,15 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA #include "connection.h" #include "host.h" +/* Only use a threaded resolver on Unix that offers getaddrinfo. + gethostbyname is NOT reentrant. + */ +#if HAVE_GETADDRINFO +#ifndef WIN32 +#define USE_THREADED_RESOLVER 1 +#endif +#endif + struct work { char *hostport; /* hostport to be resolved in separate thread */ char *ipport; /* result or NULL if it could not be resolved */ @@ -140,7 +149,7 @@ static void work_handler(void *vp) perform_getaddrinfo(w); } -#ifndef WIN32 +#if USE_THREADED_RESOLVER void iochan_handler(struct iochan *i, int event) { sel_thread_t p = iochan_getdata(i); @@ -186,7 +195,7 @@ int host_getaddrinfo(struct host *host) w->hostport = host->hostport; w->ipport = 0; w->host = host; -#ifndef WIN32 +#if USE_THREADED_RESOLVER if (use_thread) { if (resolver_thread == 0) -- 1.7.10.4