On Friday, 20 April 2018 at 05:32:32 UTC, Dmitry Olshansky wrote:
On Friday, 20 April 2018 at 00:11:25 UTC, Matthias Klumpp wrote:
On Thursday, 19 April 2018 at 18:45:41 UTC, kinke wrote:
[...]

Jup, I did that already, it just took a really long time to run because when I made the change to print errno I also enabled detailed GC profiling (via the PRINTF* debug options). Enabling the INVARIANT option for the GC is completely broken by the way, I enforced the compile to work by casting to shared, with the result of the GC locking up forever at the start of the program.

[...]

I think the order of operations is wrong, here is an example from containers:

allocator.dispose(buckets);
static if (useGC)
            GC.removeRange(buckets.ptr);

If GC triggers between dispose and removeRange, it will likely segfault.

Indeed! It's also the only place where this is shuffled around, all other parts of the containers library do this properly. The thing I wonder about is though, that the crash usually appeared in an explicit GC.collect() call when the application was not running multiple threads. At that point, the GC - as far as I know - couldn't have triggered after the buckets were disposed of and the ranges were removed. But maybe I am wrong with that assumption.
This crash would be explained perfectly by that bug.

Reply via email to