On 7/26/17 8:19 AM, Guillaume Piolat wrote:
On Wednesday, 26 July 2017 at 02:58:00 UTC, Mike Parker wrote:
When cleaning up, the GC will ensure that all destructors are run where they exist, followed by all finalizers. And destroy would be changed to call rt_destruct instead of rt_finalize.

Thoughts?

I don't get the distinction between destructors and "finalizers" but imho the problem is very much that the GC is calling ~this.

In D, the difference is when the thing is called. If it's called deterministically, either by function or by the compiler, then you have a lot more flexibility. If it's by the GC, it can be out of order with regards to your members, it could be on a different thread than the one that owned it, etc.

Regarding the OP, I think we really should strive to have something to fix this issue.

A poor-mans distinction could be done by checking whether the GC is currently the one destroying (a flag is available, but isn't publicly accessible), though that could get expensive.

-Steve

Reply via email to