Program crash: GC destroys an object unexpectedly

user1234 user1234 at 12.de
Mon Sep 13 17:40:41 UTC 2021


On Monday, 13 September 2021 at 17:18:30 UTC, eugene wrote:
> [...]

At first glance and given the fact that some code necessary to 
diagnose the problem accurately is missing:

`new Stopper` allocates using the GC. it's then a "GC range", 
it's content will be scanned and handled by the GC, including 
`sg0` and `sg1`.

So far everything is simple.

The problems seems to lies in `newSignal()` which "would" not 
allocate using the GC. So when the GC reaches `sg0` and `sg1` 
values, indirectly when scanning a `Stopper` instance, it thinks 
that these they are unused and, consequently, free them.

If you dont want them to be managed by the GC remove them from 
the GC, using `removeRange()`.


More information about the Digitalmars-d-learn mailing list