Index: src/resolver.m ================================================================== --- src/resolver.m +++ src/resolver.m @@ -57,18 +57,23 @@ of_resolve_host(OFString *host, uint16_t port, int type) { of_resolver_result_t **ret, **retIter; of_resolver_result_t *results, *resultsIter; size_t count; -#ifdef HAVE_THREADSAFE_GETADDRINFO +#ifdef HAVE_GETADDRINFO struct addrinfo hints = { 0 }, *res, *res0; char portCString[7]; hints.ai_family = AF_UNSPEC; hints.ai_socktype = type; hints.ai_flags = AI_NUMERICSERV; snprintf(portCString, 7, "%" PRIu16, port); + +# if !defined(HAVE_THREADSAFE_GETADDRINFO) && defined(OF_HAVE_THREADS) + if (!of_mutex_lock(&mutex)) + @throw [OFLockFailedException exception]; +# endif if (getaddrinfo([host UTF8String], portCString, &hints, &res0)) @throw [OFAddressTranslationFailedException exceptionWithHost: host]; @@ -101,10 +106,15 @@ *retIter = resultsIter; } *retIter = NULL; ret[0]->private_ = res0; + +# if !defined(HAVE_THREADSAFE_GETADDRINFO) && defined(OF_HAVE_THREADS) + if (!of_mutex_unlock(&mutex)) + @throw [OFUnlockFailedException exception]; +# endif #else struct hostent *he; in_addr_t s_addr; char **ip; struct sockaddr_in *addrs, *addrsIter;