For all DLLs with defined DllMain and which do not require
DLL_THREAD_ATTACH/DLL_THREAD_DETACH notifications, call
DisableThreadLibraryCalls() in order to slightly improve performance
on thread creation/exiting.
diff --git a/dlls/avifil32/factory.c b/dlls/avifil32/factory.c
index 1f03a8b..da96165 100644
--- a/dlls/avifil32/factory.c
+++ b/dlls/avifil32/factory.c
@@ -204,15 +204,11 @@
switch (fdwReason) {
case DLL_PROCESS_ATTACH:
- if (AVIFILE_hModule == NULL)
- AVIFILE_hModule = (HMODULE)hInstDll;
+ DisableThreadLibraryCalls(hInstDll);
+ AVIFILE_hModule = (HMODULE)hInstDll;
break;
case DLL_PROCESS_DETACH:
break;
- case DLL_THREAD_ATTACH:
- break;
- case DLL_THREAD_DETACH:
- break;
};
return TRUE;
diff --git a/dlls/comctl32/commctrl.c b/dlls/comctl32/commctrl.c
index 43db9d5..b2acdb7 100644
--- a/dlls/comctl32/commctrl.c
+++ b/dlls/comctl32/commctrl.c
@@ -145,6 +145,8 @@
switch (fdwReason) {
case DLL_PROCESS_ATTACH:
+ DisableThreadLibraryCalls(hinstDLL);
+
COMCTL32_hModule = (HMODULE)hinstDLL;
/* create private heap */
diff --git a/dlls/crtdll/crtdll_main.c b/dlls/crtdll/crtdll_main.c
index f461459..f2506b6 100644
--- a/dlls/crtdll/crtdll_main.c
+++ b/dlls/crtdll/crtdll_main.c
@@ -88,6 +88,9 @@
if (fdwReason == DLL_PROCESS_ATTACH)
{
DWORD version = GetVersion();
+
+ DisableThreadLibraryCalls(hinstDLL);
+
CRTDLL__basemajor_dll = (version >> 24) & 0xFF;
CRTDLL__baseminor_dll = (version >> 16) & 0xFF;
CRTDLL__baseversion_dll = (version >> 16);
diff --git a/dlls/d3d8/d3d8_main.c b/dlls/d3d8/d3d8_main.c
index 704cf06..293acb4 100644
--- a/dlls/d3d8/d3d8_main.c
+++ b/dlls/d3d8/d3d8_main.c
@@ -63,7 +63,11 @@
TRACE("fdwReason=%ld\n", fdwReason);
if (fdwReason == DLL_PROCESS_ATTACH)
{
- HMODULE mod = GetModuleHandleA( "x11drv.dll" );
+ HMODULE mod;
+
+ DisableThreadLibraryCalls(hInstDLL);
+
+ mod = GetModuleHandleA( "x11drv.dll" );
if (mod)
{
wine_tsx11_lock_ptr = (void *)GetProcAddress( mod, "wine_tsx11_lock" );
diff --git a/dlls/ddraw/main.c b/dlls/ddraw/main.c
index a3b39ca..74e272b 100644
--- a/dlls/ddraw/main.c
+++ b/dlls/ddraw/main.c
@@ -579,7 +579,11 @@
if (fdwReason == DLL_PROCESS_ATTACH)
{
- HMODULE mod = GetModuleHandleA( "x11drv.dll" );
+ HMODULE mod;
+
+ DisableThreadLibraryCalls(hInstDLL);
+
+ mod = GetModuleHandleA( "x11drv.dll" );
if (mod)
{
wine_tsx11_lock_ptr = (void *)GetProcAddress( mod, "wine_tsx11_lock" );
diff --git a/dlls/dinput/dinput_main.c b/dlls/dinput/dinput_main.c
index 20b62f2..a8ba4e4 100644
--- a/dlls/dinput/dinput_main.c
+++ b/dlls/dinput/dinput_main.c
@@ -60,6 +60,7 @@
switch(reason)
{
case DLL_PROCESS_ATTACH:
+ DisableThreadLibraryCalls(inst);
DINPUT_instance = inst;
break;
case DLL_PROCESS_DETACH:
diff --git a/dlls/dmusic/dmusic_main.c b/dlls/dmusic/dmusic_main.c
index cf12613..345b062 100644
--- a/dlls/dmusic/dmusic_main.c
+++ b/dlls/dmusic/dmusic_main.c
@@ -107,6 +107,7 @@
{
if (fdwReason == DLL_PROCESS_ATTACH)
{
+ DisableThreadLibraryCalls(hinstDLL);
/* FIXME: Initialisation */
}
else if (fdwReason == DLL_PROCESS_DETACH)
diff --git a/dlls/dplayx/dplayx_main.c b/dlls/dplayx/dplayx_main.c
index d2227fe..650fdc8 100644
--- a/dlls/dplayx/dplayx_main.c
+++ b/dlls/dplayx/dplayx_main.c
@@ -38,6 +38,7 @@
switch ( fdwReason )
{
case DLL_PROCESS_ATTACH:
+ DisableThreadLibraryCalls(hinstDLL);
/* First instance perform construction of global processor data */
return DPLAYX_ConstructData();
@@ -45,9 +46,6 @@
/* Last instance performs destruction of global processor data */
return DPLAYX_DestructData();
- case DLL_THREAD_ATTACH: /* Do nothing */
- case DLL_THREAD_DETACH: /* Do nothing */
- break;
default:
break;
diff --git a/dlls/dpnhpast/main.c b/dlls/dpnhpast/main.c
index c77a4ca..6aa05b1 100644
--- a/dlls/dpnhpast/main.c
+++ b/dlls/dpnhpast/main.c
@@ -35,6 +35,7 @@
if (fdwReason == DLL_PROCESS_ATTACH)
{
+ DisableThreadLibraryCalls(hinstDLL);
/* FIXME: Initialisation */
}
else if (fdwReason == DLL_PROCESS_DETACH)
diff --git a/dlls/gdi/gdi_main.c b/dlls/gdi/gdi_main.c
index 14b637b..99c49c4 100644
--- a/dlls/gdi/gdi_main.c
+++ b/dlls/gdi/gdi_main.c
@@ -32,6 +32,7 @@
BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD reason, LPVOID lpvReserved)
{
if (reason != DLL_PROCESS_ATTACH) return TRUE;
+ DisableThreadLibraryCalls(hinstDLL);
return GDI_Init();
}
diff --git a/dlls/imagehlp/imagehlp_main.c b/dlls/imagehlp/imagehlp_main.c
index 7645f43..fa6b882 100644
--- a/dlls/imagehlp/imagehlp_main.c
+++ b/dlls/imagehlp/imagehlp_main.c
@@ -40,16 +40,13 @@
switch(fdwReason)
{
case DLL_PROCESS_ATTACH:
+ DisableThreadLibraryCalls(hinstDLL);
IMAGEHLP_hHeap = HeapCreate(0, 0x10000, 0);
break;
case DLL_PROCESS_DETACH:
HeapDestroy(IMAGEHLP_hHeap);
IMAGEHLP_hHeap = NULL;
break;
- case DLL_THREAD_ATTACH:
- break;
- case DLL_THREAD_DETACH:
- break;
default:
break;
}
diff --git a/dlls/imm32/imm.c b/dlls/imm32/imm.c
index dee6893..d1b70a5 100644
--- a/dlls/imm32/imm.c
+++ b/dlls/imm32/imm.c
@@ -86,6 +86,7 @@
switch (fdwReason)
{
case DLL_PROCESS_ATTACH:
+ DisableThreadLibraryCalls(hInstDLL);
hImeInst = hInstDLL;
break;
case DLL_PROCESS_DETACH:
diff --git a/dlls/msacm/msacm32_main.c b/dlls/msacm/msacm32_main.c
index 82317dc7..71a94f3 100644
--- a/dlls/msacm/msacm32_main.c
+++ b/dlls/msacm/msacm32_main.c
@@ -44,6 +44,7 @@
switch (fdwReason) {
case DLL_PROCESS_ATTACH:
+ DisableThreadLibraryCalls(hInstDLL);
MSACM_hHeap = HeapCreate(0, 0x10000, 0);
MSACM_hInstance32 = hInstDLL;
MSACM_RegisterAllDrivers();
@@ -54,10 +55,6 @@
MSACM_hHeap = NULL;
MSACM_hInstance32 = NULL;
break;
- case DLL_THREAD_ATTACH:
- break;
- case DLL_THREAD_DETACH:
- break;
default:
break;
}
diff --git a/dlls/msisys/Makefile.in b/dlls/msisys/Makefile.in
index 2433508..bafddc1 100644
--- a/dlls/msisys/Makefile.in
+++ b/dlls/msisys/Makefile.in
@@ -3,6 +3,7 @@
SRCDIR = @srcdir@
VPATH = @srcdir@
MODULE = msisys.ocx
+IMPORTS = kernel32
EXTRALIBS = $(LIBUUID)
LDDLLFLAGS = @LDDLLFLAGS@
diff --git a/dlls/msisys/msisys.c b/dlls/msisys/msisys.c
index e88dc65..85e2755 100644
--- a/dlls/msisys/msisys.c
+++ b/dlls/msisys/msisys.c
@@ -62,16 +62,13 @@
switch ( fdwReason )
{
case DLL_PROCESS_ATTACH:
+ DisableThreadLibraryCalls(hInstDLL);
if ( !MSISYS_InitProcess() )
return FALSE;
break;
case DLL_PROCESS_DETACH:
MSISYS_UninitProcess();
break;
- case DLL_THREAD_ATTACH:
- break;
- case DLL_THREAD_DETACH:
- break;
}
return TRUE;
diff --git a/dlls/msvideo/msrle32/msrle32.c b/dlls/msvideo/msrle32/msrle32.c
index 6d12127..f7a6b8e 100644
--- a/dlls/msvideo/msrle32/msrle32.c
+++ b/dlls/msvideo/msrle32/msrle32.c
@@ -1902,13 +1902,10 @@
switch (dwReason) {
case DLL_PROCESS_ATTACH:
- if (MSRLE32_hModule == 0)
- MSRLE32_hModule = hModule;
+ DisableThreadLibraryCalls(hModule);
+ MSRLE32_hModule = hModule;
break;
- case DLL_THREAD_ATTACH:
- break;
- case DLL_THREAD_DETACH:
- break;
+
case DLL_PROCESS_DETACH:
break;
};
diff --git a/dlls/netapi32/netapi32.c b/dlls/netapi32/netapi32.c
index 8d1f192..06b0ec2 100644
--- a/dlls/netapi32/netapi32.c
+++ b/dlls/netapi32/netapi32.c
@@ -110,6 +110,7 @@
switch (fdwReason) {
case DLL_PROCESS_ATTACH:
+ DisableThreadLibraryCalls(hinstDLL);
NETAPI32_hModule = hinstDLL;
break;
case DLL_PROCESS_DETACH:
diff --git a/dlls/odbc32/Makefile.in b/dlls/odbc32/Makefile.in
index 62a9184..6864e39 100644
--- a/dlls/odbc32/Makefile.in
+++ b/dlls/odbc32/Makefile.in
@@ -3,6 +3,7 @@
SRCDIR = @srcdir@
VPATH = @srcdir@
MODULE = odbc32.dll
+IMPORTS = kernel32
LDDLLFLAGS = @LDDLLFLAGS@
SYMBOLFILE = $(MODULE).tmp.o
diff --git a/dlls/odbc32/proxyodbc.c b/dlls/odbc32/proxyodbc.c
index a762ca4..f1d0cb2 100644
--- a/dlls/odbc32/proxyodbc.c
+++ b/dlls/odbc32/proxyodbc.c
@@ -176,6 +176,7 @@
if (fdwReason == DLL_PROCESS_ATTACH)
{
TRACE("Loading ODBC...\n");
+ DisableThreadLibraryCalls(hinstDLL);
if (ODBC_LoadDriverManager())
ODBC_LoadDMFunctions();
}
diff --git a/dlls/ole32/ole32_main.c b/dlls/ole32/ole32_main.c
index 1e2a985..f5f7905 100644
--- a/dlls/ole32/ole32_main.c
+++ b/dlls/ole32/ole32_main.c
@@ -97,6 +97,7 @@
switch(fdwReason) {
case DLL_PROCESS_ATTACH:
+ DisableThreadLibraryCalls(hinstDLL);
OLE32_hInstance = hinstDLL;
COMPOBJ_InitProcess();
if (TRACE_ON(ole)) CoRegisterMallocSpy((LPVOID)-1);
diff --git a/dlls/opengl32/wgl.c b/dlls/opengl32/wgl.c
index 03e85c0..3faef4f 100644
--- a/dlls/opengl32/wgl.c
+++ b/dlls/opengl32/wgl.c
@@ -683,6 +683,7 @@
switch(reason)
{
case DLL_PROCESS_ATTACH:
+ DisableThreadLibraryCalls(hinst);
return process_attach();
case DLL_PROCESS_DETACH:
process_detach();
diff --git a/dlls/quartz/main.c b/dlls/quartz/main.c
index b1151e9..68e63b7 100644
--- a/dlls/quartz/main.c
+++ b/dlls/quartz/main.c
@@ -34,6 +34,7 @@
{
switch(fdwReason) {
case DLL_PROCESS_ATTACH:
+ DisableThreadLibraryCalls(hInstDLL);
break;
case DLL_PROCESS_DETACH:
break;
diff --git a/dlls/richedit/richedit.c b/dlls/richedit/richedit.c
index 38bdaa1..e3525d1 100644
--- a/dlls/richedit/richedit.c
+++ b/dlls/richedit/richedit.c
@@ -71,6 +71,7 @@
switch (fdwReason)
{
case DLL_PROCESS_ATTACH:
+ DisableThreadLibraryCalls(hinstDLL);
/* create private heap */
RICHED32_hHeap = HeapCreate (0, 0x10000, 0);
/* register the Rich Edit class */
diff --git a/dlls/rpcrt4/rpcrt4_main.c b/dlls/rpcrt4/rpcrt4_main.c
index c743224..b10e1fd 100644
--- a/dlls/rpcrt4/rpcrt4_main.c
+++ b/dlls/rpcrt4/rpcrt4_main.c
@@ -167,6 +167,7 @@
{
switch (fdwReason) {
case DLL_PROCESS_ATTACH:
+ DisableThreadLibraryCalls(hinstDLL);
master_mutex = CreateMutexA( NULL, FALSE, RPCSS_MASTER_MUTEX_NAME);
if (!master_mutex)
ERR("Failed to create master mutex\n");
diff --git a/dlls/serialui/confdlg.c b/dlls/serialui/confdlg.c
index b097bf1..a4e241e 100644
--- a/dlls/serialui/confdlg.c
+++ b/dlls/serialui/confdlg.c
@@ -65,6 +65,7 @@
switch (fdwReason) {
case DLL_PROCESS_ATTACH:
+ DisableThreadLibraryCalls(hinstDLL);
SERIALUI_hModule = hinstDLL;
break;
case DLL_PROCESS_DETACH:
diff --git a/dlls/shlwapi/shlwapi_main.c b/dlls/shlwapi/shlwapi_main.c
index 9041fb1..8dea829 100644
--- a/dlls/shlwapi/shlwapi_main.c
+++ b/dlls/shlwapi/shlwapi_main.c
@@ -65,6 +65,7 @@
switch (fdwReason)
{
case DLL_PROCESS_ATTACH:
+ DisableThreadLibraryCalls(hinstDLL);
shlwapi_hInstance = hinstDLL;
SHLWAPI_ThreadRef_index = TlsAlloc();
break;
diff --git a/dlls/snmpapi/Makefile.in b/dlls/snmpapi/Makefile.in
index 4c6dee2..afc7054 100644
--- a/dlls/snmpapi/Makefile.in
+++ b/dlls/snmpapi/Makefile.in
@@ -3,6 +3,7 @@
SRCDIR = @srcdir@
VPATH = @srcdir@
MODULE = snmpapi.dll
+IMPORTS = kernel32
LDDLLFLAGS = @LDDLLFLAGS@
SYMBOLFILE = $(MODULE).tmp.o
diff --git a/dlls/snmpapi/main.c b/dlls/snmpapi/main.c
index cc8c1fe..bf20c2d 100644
--- a/dlls/snmpapi/main.c
+++ b/dlls/snmpapi/main.c
@@ -20,8 +20,7 @@
#include "config.h"
-#include "windef.h"
-
+#include "winbase.h"
#include "wine/debug.h"
WINE_DEFAULT_DEBUG_CHANNEL(snmpapi);
@@ -38,13 +37,10 @@
switch(fdwReason) {
case DLL_PROCESS_ATTACH:
+ DisableThreadLibraryCalls(hInstDLL);
break;
case DLL_PROCESS_DETACH:
break;
- case DLL_THREAD_ATTACH:
- break;
- case DLL_THREAD_DETACH:
- break;
}
return TRUE;
diff --git a/dlls/ttydrv/ttydrv_main.c b/dlls/ttydrv/ttydrv_main.c
index b46b64d..6800ba1 100644
--- a/dlls/ttydrv/ttydrv_main.c
+++ b/dlls/ttydrv/ttydrv_main.c
@@ -76,6 +76,7 @@
switch(reason)
{
case DLL_PROCESS_ATTACH:
+ DisableThreadLibraryCalls(hinst);
process_attach();
break;
diff --git a/dlls/twain/twain32_main.c b/dlls/twain/twain32_main.c
index 4771a82..56a5a32 100644
--- a/dlls/twain/twain32_main.c
+++ b/dlls/twain/twain32_main.c
@@ -33,15 +33,10 @@
switch (fdwReason)
{
case DLL_PROCESS_ATTACH:
+ DisableThreadLibraryCalls(hinstDLL);
DSM_currentState = 2;
break;
- case DLL_THREAD_ATTACH:
- break;
-
- case DLL_THREAD_DETACH:
- break;
-
case DLL_PROCESS_DETACH:
DSM_currentState = 1;
break;
diff --git a/dlls/urlmon/urlmon_main.c b/dlls/urlmon/urlmon_main.c
index 2689bfb..8f88361 100644
--- a/dlls/urlmon/urlmon_main.c
+++ b/dlls/urlmon/urlmon_main.c
@@ -18,7 +18,7 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
-#include "windef.h"
+#include "winbase.h"
#include "winerror.h"
#include "wtypes.h"
@@ -39,6 +39,7 @@
switch(fdwReason) {
case DLL_PROCESS_ATTACH:
+ DisableThreadLibraryCalls(hinstDLL);
URLMON_hInstance = hinstDLL;
break;
diff --git a/dlls/winaspi/winaspi32.c b/dlls/winaspi/winaspi32.c
index 9d311bb..bc9095e 100644
--- a/dlls/winaspi/winaspi32.c
+++ b/dlls/winaspi/winaspi32.c
@@ -62,14 +62,12 @@
switch( fdwReason )
{
case DLL_PROCESS_ATTACH:
+ DisableThreadLibraryCalls(hInstDLL);
SCSI_Init();
break;
case DLL_PROCESS_DETACH:
DeleteCriticalSection( &ASPI_CritSection );
break;
- case DLL_THREAD_ATTACH:
- case DLL_THREAD_DETACH:
- break;
}
#endif /* defined(linux) */
return TRUE;
diff --git a/dlls/winedos/dosvm.c b/dlls/winedos/dosvm.c
index cfd8921..3295b19 100644
--- a/dlls/winedos/dosvm.c
+++ b/dlls/winedos/dosvm.c
@@ -688,6 +688,7 @@
if (fdwReason == DLL_PROCESS_ATTACH)
{
+ DisableThreadLibraryCalls(hinstDLL);
DOSVM_InitSegments();
event_notifier = CreateEventA(NULL, FALSE, FALSE, NULL);
diff --git a/dlls/wineps/init.c b/dlls/wineps/init.c
index a317623..ac6d747 100644
--- a/dlls/wineps/init.c
+++ b/dlls/wineps/init.c
@@ -121,6 +121,7 @@
switch(reason) {
case DLL_PROCESS_ATTACH:
+ DisableThreadLibraryCalls(hinst);
PSDRV_Heap = HeapCreate(0, 0x10000, 0);
if (PSDRV_Heap == NULL)
diff --git a/dlls/winmm/mciavi/mciavi.c b/dlls/winmm/mciavi/mciavi.c
index e2684d8..f96cac9 100644
--- a/dlls/winmm/mciavi/mciavi.c
+++ b/dlls/winmm/mciavi/mciavi.c
@@ -122,6 +122,7 @@
{
switch (fdwReason) {
case DLL_PROCESS_ATTACH:
+ DisableThreadLibraryCalls(hInstDLL);
MCIAVI_hInstance = hInstDLL;
break;
}
diff --git a/dlls/winmm/winmm.c b/dlls/winmm/winmm.c
index 5f5cdd4..b770164 100644
--- a/dlls/winmm/winmm.c
+++ b/dlls/winmm/winmm.c
@@ -125,6 +125,8 @@
switch (fdwReason) {
case DLL_PROCESS_ATTACH:
+ DisableThreadLibraryCalls(hInstDLL);
+
if (!WINMM_CreateIData(hInstDLL))
return FALSE;
if (!MCI_Init() || !MMDRV_Init()) {
@@ -141,9 +143,6 @@
WINMM_DeleteIData();
break;
- case DLL_THREAD_ATTACH:
- case DLL_THREAD_DETACH:
- break;
}
return TRUE;
}
diff --git a/dlls/winsock/socket.c b/dlls/winsock/socket.c
index 38dfd87..8e87775 100644
--- a/dlls/winsock/socket.c
+++ b/dlls/winsock/socket.c
@@ -444,6 +444,7 @@
TRACE("%p 0x%lx %p\n", hInstDLL, fdwReason, fImpLoad);
switch (fdwReason) {
case DLL_PROCESS_ATTACH:
+ DisableThreadLibraryCalls(hInstDLL);
opentype_tls_index = TlsAlloc();
break;
case DLL_PROCESS_DETACH:
diff --git a/dlls/winspool/wspool.c b/dlls/winspool/wspool.c
index d49cdb6..1db2854 100644
--- a/dlls/winspool/wspool.c
+++ b/dlls/winspool/wspool.c
@@ -41,6 +41,8 @@
{
case DLL_PROCESS_ATTACH: {
extern void WINSPOOL_LoadSystemPrinters();
+
+ DisableThreadLibraryCalls(hInstance);
WINSPOOL_LoadSystemPrinters();
break;
}