dmain2.d - When should _moduleDtor() be called?
Jarrett Billingsley
kb3ctd2 at yahoo.com
Wed May 17 18:49:22 PDT 2006
I was looking at /dmd/src/phobos/internal/dmain2.d today when I noticed
something about when _moduleDtor() is called. Currently, it's called
immediately after calling the user-defined main function. The problem I
have with this is - what if an exception happens? The module dtors are
never called. The spec for modules says that "Static destructors for
individual modules will only be run if the corresponding static constructor
successfully completed," but with the current code, if a module ctor throws
an exception, _no_ module dtors are called, even if their corresponding
ctors completed successfully!
(And I just noticed that gc_term() is also liable not to be called, though
I'm not sure if it's supposed to be when an exception is thrown.)
As such, I propose that the call to _moduleDtor() be moved (in the
exception-handling version anyway) to a finally block following the existing
try-catch block. Additionally, the WinMain in the D for Win32 spec page
should be changed to match. (interestingly, in the WinMain example,
gc_term() is called _after_ the try-catch block, meaning it's always called,
exception or not.. maybe this is a hint?)
More information about the Digitalmars-d
mailing list