| 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(); |
| } |