[phobos] std.parallelism's unit tests randomly hang on win32
David Simcha
dsimcha at gmail.com
Sun May 1 12:44:50 PDT 2011
Update: The segfaults on Linux64 are also being caused by the low order
bit corruption bug. Whenever I look at the chain of pointer
dereferences in GDB by viewing the registers and disassembly on crash,
the segfault is always caused by dereferencing a pointer to some memory
address that's clearly illegal. (On x64 user mode addresses can't have
their high order bits set, and the addresses being dereferenced often
do. See http://en.wikipedia.org/wiki/X64#Virtual_address_space_details
.) This wild pointer is obtained by dereferencing another pointer whose
low order bits are always equal to TaskStatus.done. For example, if
TaskStatus.done == 2, the pointer might be something like 0x0000ABCD
EF123402. If TaskStatus.done == 1, it will be something like 0x0000ABCD
EF123401.
Therefore, somehow the low order bits of pointers are getting corrupted
with the value of TaskStatus.done in several places. This is strong
evidence that the underlying issue is a codegen bug or a bug in the ASM
for the atomic ops, not a concurrency bug.
More information about the phobos
mailing list