On Wed, 18 Dec 2024 19:53:10 GMT, Magnus Ihse Bursie <[email protected]> wrote:

> > I do read your comment about not knowing when the static destructors are 
> > called vs the DllMain on shutdown, but surely this _is_ well defined ?
> 
> That is possible. It could be just that I have failed to locate the 
> documentation about this.

Here is the documentation: (from 
https://learn.microsoft.com/en-us/cpp/build/run-time-library-behavior?view=msvc-170;
 thanks @dholmes-ora for the link)

"The VCRuntime library provides an entry-point function called 
_DllMainCRTStartup to handle default initialization and termination operations. 
On process attach, the _DllMainCRTStartup function sets up buffer security 
checks, initializes the CRT and other libraries, initializes run-time type 
information, initializes and calls constructors for static and non-local data, 
initializes thread-local storage, increments an internal static counter for 
each attach, and then calls a user- or library-supplied DllMain. On process 
detach, the function goes through these steps in reverse. It calls DllMain, 
decrements the internal counter, calls destructors, calls CRT termination 
functions and registered atexit functions, and notifies any other libraries of 
termination."

The TL;DR is that `DllMain` with `DLL_PROCESS_DETACH` happens before static 
destructors.

-------------

PR Comment: https://git.openjdk.org/jdk/pull/22790#issuecomment-2589586521

Reply via email to