| final class Class | |
| { | |
| // This gets triggered although the instance always stays referenced. | |
| ~this() | |
| { | |
| import core.stdc.stdlib; | |
| abort(); | |
| } | |
| } | |
| Class obj; | |
| static this() | |
| { | |
| obj = new Class; | |
| } | |
| static ~this() | |
| { | |
| // Free without destruction to avoid triggering abort() | |
| import core.memory; | |
| GC.free(cast(void*)obj); | |
| } | |
| void doit() | |
| { | |
| foreach (i; 0 .. 10_000) | |
| new ubyte[](100_000); | |
| } | |
| void main() | |
| { | |
| import core.thread; | |
| auto t = new Thread(&doit); | |
| t.start(); | |
| // This triggers the GC that frees the still referenced Class instance. | |
| doit(); | |
| } |