]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
Disable calling DllMain() on thread creation/destruction
authorOndřej Surý <ondrej@isc.org>
Tue, 14 Jul 2020 08:52:02 +0000 (10:52 +0200)
committerOndřej Surý <ondrej@sury.org>
Thu, 18 Feb 2021 18:33:54 +0000 (19:33 +0100)
Disables the DLL_THREAD_ATTACH and DLL_THREAD_DETACH notifications for
the specified dynamic-link library (DLL).  This can reduce the size of
the working set for some applications.

lib/isc/win32/DLLMain.c

index 91f14e7b0096c7ca982645274517e2ee819889ae..3acfee4f4679e9ba1e45776634865742a8992e02 100644 (file)
@@ -19,27 +19,32 @@ __declspec(dllexport) BOOL WINAPI
        DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved) {
        switch (fdwReason) {
        /*
-        * The DLL is loading due to process
-        * initialization or a call to LoadLibrary.
+        * The DLL is loading due to process initialization or a call to
+        * LoadLibrary.
         */
        case DLL_PROCESS_ATTACH:
-               break;
-
-       /* The attached process creates a new thread.  */
-       case DLL_THREAD_ATTACH:
-               break;
-
-       /* The thread of the attached process terminates. */
-       case DLL_THREAD_DETACH:
+               /*
+                * Disable DllMain() invocation on Thread creation/destruction
+                */
+               DisableThreadLibraryCalls(hinstDLL);
                break;
 
        /*
-        * The DLL is unloading from a process due to
-        * process termination or a call to FreeLibrary.
+        * The DLL is unloading from a process due to process
+        * termination or a call to FreeLibrary.
         */
        case DLL_PROCESS_DETACH:
                break;
 
+       case DLL_THREAD_ATTACH:
+       case DLL_THREAD_DETACH:
+               /*
+                * Calling DllMain when attaching/detaching process has been
+                * disabled.
+                */
+               INSIST(0);
+               break;
+
        default:
                break;
        }