Heisenbug involving Destructors & GC - Help Needed

Maxime Chevalier-Boisvert via Digitalmars-d digitalmars-d at puremagic.com
Fri Jun 26 11:27:33 PDT 2015


I seem to have run into a heisenbug involving destructors and the 
GC. I'm kind of stuck at this point and need help tracking down 
the issue.

I put the broken code in a branch called heisenbug on github:
https://github.com/higgsjs/Higgs/tree/heisenbug

The problem manifests itself on runs of `make test` (my 
unittests), but only some of the time. I wrote a script to run 
`make test` repeatedly to try and find a solution:
https://github.com/higgsjs/Higgs/blob/heisenbug/source/repeatmaketest.py

The problem usually manifests itself after 5 to 15 runs on my 
machine. I get a segmentation fault, not always in the same 
place. The randomness seems to stem from address space 
randomization.

It seems the issue is caused by my freeing/reinitializing the VM 
during unit tests. More specifically, commenting out this line 
makes the problem go away:
https://github.com/higgsjs/Higgs/blob/heisenbug/source/runtime/vm.d#L741

Higgs can run all of my benchmarks without ever failing, but 
restarting the VM during `make test` seems to be causing this 
problem to happen. It's not impossible that there could be 
another underlying issue, such as the JITted code I generate 
corrupting some memory location, but it would seem that if this 
were the case, the issue would likely show up outside of unit 
tests. Any help would be appreciated.


More information about the Digitalmars-d mailing list