I have a .NET C# / C++ app which uses a call to exit(0)
(from <stdlib.h>
) in a thread in order to terminate.
The strange part is, under some circumstances, the finalizers of the managed objects are called right after the call to exit
, and in other circumstances, they are not called at all.
The circumstances are pretty deterministic - the app calls some methods from an external plugin dll (written in unmanaged C) during its lifetime.
If I use dll A, the finalizers are always called.
If I use dll B, the finalizers are never called.
What's the expected behaviour of finalizers in case of an exit(0) call? (if there is any expected -and documented- behaviour)
Can the calls to the external dlls change some global setting that may impact the way the process is terminated?