On Thursday, 18 February 2016 at 01:19:16 UTC, Ali Çehreli wrote:
On 02/17/2016 05:14 PM, ZombineDev wrote:
> The "Invalid memory operation" error is thrown only by the GC
(AFAIK)
> when the user tries something unsupported like allocating or
freeing in
> a destructor, while a GC collection is being run.
That. The problem is when the assert check fails (for
value==60). The GC fails to create the exception object.
Ali
Hmm, why does the destructor of object 60 run in the middle of
nowhere? I remember seeing it crash while my debugger was in
_d_arraysetlengthT [1], though I don't know exactly where because
I didn't have debug symbols for druntime. __doPostblit[2] checks
if the type has disabled this(this) and if so it doesn't do
anything. So the destructor should not have been run because of
the array resize. Seems like there maybe some memory corruption
or a bug in druntime.
[1]:
https://github.com/D-Programming-Language/druntime/blob/e47a00bff935c3f079bb567a6ec97663ba384487/src/rt/lifetime.d#L1265
[2]:
https://github.com/D-Programming-Language/druntime/blob/e47a00bff935c3f079bb567a6ec97663ba384487/src/rt/lifetime.d#L566