Dan Kegel : iphlpapi: _res is per-thread in glibc.
Alexandre Julliard
julliard at winehq.org
Mon Feb 8 11:06:09 CST 2010
Module: wine
Branch: master
Commit: 22434f490a83d2a1f4c3721d95f9a7c78fd44ef1
URL: http://source.winehq.org/git/wine.git/?a=commit;h=22434f490a83d2a1f4c3721d95f9a7c78fd44ef1
Author: Dan Kegel <dank at kegel.com>
Date: Mon Feb 8 06:25:36 2010 -0800
iphlpapi: _res is per-thread in glibc.
---
dlls/iphlpapi/iphlpapi_main.c | 9 +++------
dlls/iphlpapi/tests/iphlpapi.c | 12 ++++++++++--
2 files changed, 13 insertions(+), 8 deletions(-)
diff --git a/dlls/iphlpapi/iphlpapi_main.c b/dlls/iphlpapi/iphlpapi_main.c
index 011e21a..7edff9e 100644
--- a/dlls/iphlpapi/iphlpapi_main.c
+++ b/dlls/iphlpapi/iphlpapi_main.c
@@ -66,16 +66,13 @@ 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 OS X 10.4 */
+/* Call once per thread on systems that have per-thread _res. */
+/* FIXME: should do same fix in dnsapi (or use dnsapi here?) */
static void initialise_resolver(void)
{
- if (!resolver_initialised)
- {
+ if ((_res.options & RES_INIT) == 0)
res_init();
- resolver_initialised = 1;
- }
}
BOOL WINAPI DllMain (HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
diff --git a/dlls/iphlpapi/tests/iphlpapi.c b/dlls/iphlpapi/tests/iphlpapi.c
index 7a35f7c..2410aca 100644
--- a/dlls/iphlpapi/tests/iphlpapi.c
+++ b/dlls/iphlpapi/tests/iphlpapi.c
@@ -765,11 +765,12 @@ GetBestRoute
IpReleaseAddress
IpRenewAddress
*/
-static void testWin98Functions(void)
+static DWORD CALLBACK testWin98Functions(void *p)
{
testGetInterfaceInfo();
testGetAdaptersInfo();
testGetNetworkParams();
+ return 0;
}
static void testGetPerAdapterInfo(void)
@@ -885,9 +886,16 @@ START_TEST(iphlpapi)
loadIPHlpApi();
if (hLibrary) {
+ HANDLE thread;
+
testWin98OnlyFunctions();
testWinNT4Functions();
- testWin98Functions();
+
+ /* run testGetXXXX in two threads at once to make sure we don't crash in that case */
+ thread = CreateThread(NULL, 0, testWin98Functions, NULL, 0, NULL);
+ testWin98Functions(NULL);
+ WaitForSingleObject(thread, INFINITE);
+
testWin2KFunctions();
test_GetAdaptersAddresses();
freeIPHlpApi();
More information about the wine-cvs
mailing list