On Monday, 13 June 2016 at 16:43:57 UTC, cy wrote:
On Monday, 13 June 2016 at 08:58:40 UTC, Vladimir Panteleev
wrote:
FWIW: http://wiki.dlang.org/InvalidMemoryOperationError
Yeah... I did forget that the GC was not re-entrant. But the
"stop collecting inside the destructor, moron" error is exactly
the same as "something allocated in the destructor... moron"
error.
"The GC is not re-entrant" applies to all of its parts, not only
the actual part doing the GC and reclaiming memory - i.e. calling
any GC function (allocation or an explicit free) while a GC
function is running is not supported. In practice, this only
applies to allocation/free from a destructor invoked by a GC
sweep though.
I'd think we could just allocate space for a potential stack
trace before starting garbage collection, but I guess not?
The problem is certainly solvable, but, well, a GC cycle is
initiated precisely when the runtime runs out of memory.