Module: wine Branch: master Commit: dfebf1b91d29898731af7976fcc23ff4ac683b2d URL: http://source.winehq.org/git/wine.git/?a=commit;h=dfebf1b91d29898731af7976fc...
Author: Hans Leidekker hans@it.vu.nl Date: Wed Apr 18 20:39:33 2007 +0200
iphlpapi: Only call res_init() once per process.
---
dlls/dnsapi/query.c | 15 +++++++++++++-- dlls/iphlpapi/iphlpapi_main.c | 14 +++++++++++++- 2 files changed, 26 insertions(+), 3 deletions(-)
diff --git a/dlls/dnsapi/query.c b/dlls/dnsapi/query.c index 38f8801..5d9d6db 100644 --- a/dlls/dnsapi/query.c +++ b/dlls/dnsapi/query.c @@ -65,6 +65,17 @@ static CRITICAL_SECTION resolver_cs = { &resolver_cs_debug, -1, 0, 0, 0, 0 }; #define LOCK_RESOLVER() do { EnterCriticalSection( &resolver_cs ); } while (0) #define UNLOCK_RESOLVER() do { LeaveCriticalSection( &resolver_cs ); } while (0)
+static int resolver_initialised; + +/* call res_init() just once because of a bug in Mac OSX 10.4 */ +static void initialise_resolver( void ) +{ + if (!resolver_initialised) + { + res_init(); + resolver_initialised = 1; + } +}
static const char *dns_section_to_str( ns_sect section ) { @@ -699,7 +710,7 @@ DNS_STATUS WINAPI DnsQuery_UTF8( PCSTR name, WORD type, DWORD options, PIP4_ARRA
LOCK_RESOLVER();
- res_init(); + initialise_resolver(); _res.options |= dns_map_options( options );
if (servers && (ret = dns_set_serverlist( servers ))) @@ -817,7 +828,7 @@ DNS_STATUS WINAPI DnsQueryConfig( DNS_CONFIG_TYPE config, DWORD flag, PWSTR adap #ifdef HAVE_RESOLV LOCK_RESOLVER();
- res_init(); + initialise_resolver(); ret = dns_get_serverlist( buffer, len );
UNLOCK_RESOLVER(); diff --git a/dlls/iphlpapi/iphlpapi_main.c b/dlls/iphlpapi/iphlpapi_main.c index e408547..c80e1e0 100644 --- a/dlls/iphlpapi/iphlpapi_main.c +++ b/dlls/iphlpapi/iphlpapi_main.c @@ -50,6 +50,18 @@ WINE_DEFAULT_DEBUG_CHANNEL(iphlpapi); #define INADDR_NONE ~0UL #endif
+static int resolver_initialised; + +/* call res_init() just once because of a bug in Mac OSX 10.4 */ +static void initialise_resolver(void) +{ + if (!resolver_initialised) + { + res_init(); + resolver_initialised = 1; + } +} + BOOL WINAPI DllMain (HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved) { switch (fdwReason) { @@ -1340,7 +1352,7 @@ DWORD WINAPI GetNetworkParams(PFIXED_INFO pFixedInfo, PULONG pOutBufLen) if (!pOutBufLen) return ERROR_INVALID_PARAMETER;
- res_init(); + initialise_resolver(); size = sizeof(FIXED_INFO) + (_res.nscount > 0 ? (_res.nscount - 1) * sizeof(IP_ADDR_STRING) : 0); if (!pFixedInfo || *pOutBufLen < size) {