On Wednesday, 19 November 2014 at 03:47:04 UTC, Maxime
Chevalier-Boisvert wrote:
I posted a thread the other day explaining that I was running
into a memory leak issue which is very hard to debug. There
seems to be a false pointer somewhere, and I have no way of
knowing where that is or which object is being pointed to. I
decided to take the easy way out and explicitly free memory
when I don't need it. Unfortunately, this brings about more
problems.
I'm trying to explicitly free chunks of memory allocated with
GC.malloc() in a destructor. This works fine while the program
is running, but when the program terminates, it seems the GC
calls all destructors in an arbitrary order. I then get a
core.exception.InvalidMemoryOperationError because I'm trying
to free memory that is already freed.
InvalidMemoryOperationError occurs when you're trying to invoke
GC functions during a GC pass (because the current D GC is
non-reentrant). This can occur if you explicitly free objects
from the destructor, and the destructor is invoked by the GC.
I suppose you can work around this by using a separate function
which deallocates owned objects' memory.
P.S. Still working on Diamond.