On 20.10.2016 09:17, Benjamin Thaut wrote:
This is a topic really specific to druntime, I don't know a better place
to put it though.

rt_init increases the _initCount and rt_term decreases it and only
terminates the runtime in case the _initCount reaches zero (see dmain2.d)

[...]

The problem is step 5) in the above list. When the main executable
leaves dmain the runtime should be deinitialized no matter if any dll is
still loaded or not. If this would be the case the module Dtors would be
calle din the correct order. I can't remove the rt_init calls from the
dll loading code however because that would mean when loading a d-dll
into a C process druntime would never be initialized. So I'm thinking of
adding a force parameter to rt_term which will always deinitialize
druntime disregarding the _initCount. This feels like a hack though.

Any suggestions how to solve this problem? Who are other platforms doing
it?

I don't think the current rt_init/rt_exit function are suitable for DLLs or executables that are using a shared druntime library.

The wrapper around main in the executable should work just as any DLLs' DllMain, i.e. it should register/unregister its own data segments with the GC and run its shared and TLS module constructors/decoontructors. Everything else should be handled by the druntime DLL.

Reply via email to