Corruption of shared data with multiple threads
Johan Engelen via digitalmars-d-ldc
digitalmars-d-ldc at puremagic.com
Sun Mar 29 09:46:22 PDT 2015
Hi all,
I am working on adding coverage analysis (like DMD's) to LDC.
It is a work in progress, but you can test the current status
here: https://github.com/JohanEngelen/ldc/tree/coverage
It already works nicely, but the line count is not increased for
all types of statements yet. I've been breaking my head on a
problem with multithreaded programs.
This test program works fine (ldc2 -cov test.d)
void main() {
fun(...);
}
void fun(...) {
...
}
and outputs the same line count as dmd does.
Making the program multithreaded, like this:
import std.concurrency;
void main() {
spawn(&fun,...);
}
void fun(...) {
...
}
no longer works. (it actually used to work for me, but for some
reason with a completely rebuilt druntime, it crashes). I've
traced the problem back to the Cover[] gdata data structure in
druntime/cover.d becoming corrupted somewhere during program
execution. More specifically, in struct Cover, filename.length
becomes corrupted somehow.
Is it a known issue, that we have some bugs with shared data +
multiple threads?
Thanks,
Johan
(LLVM 3.6, MSVC, x64)
More information about the digitalmars-d-ldc
mailing list