Cycle detected between modules with ctors/dtors

Steven Schveighoffer schveiguy at yahoo.com
Mon Apr 25 07:31:57 PDT 2011


On Sat, 23 Apr 2011 04:34:39 -0400, Jonathan M Davis <jmdavisProg at gmx.com>  
wrote:


> It happens when a module imports - directly or indirectly - another  
> module
> which imports it - directly or indirectly - and they both have static
> constructors and/or static destructors (it _might_ not happen if one of  
> them
> has static constructors but not static destructors and the other has  
> static
> destructors and no static constructors, but if they both have either a  
> static
> constructor or static destructor, it _will_ happen).

Note, the cyclic detection algorithm does not distinguish between these  
scenarios.  It does distinguish between thread local and shared  
ctor/dtors, but it just uses a single flag to denote having static  
constructors or destructors.

I think the reason might be that the runtime is supposed to run  
destructors in reverse order as constructors.  If it did the cycle  
detection independently, you would possibly have a different order for  
destruction.  I'm not sure it really matters.  It might be worth a  
bugzilla report/further discussion.

-Steve


More information about the Digitalmars-d-learn mailing list