[phobos] State of std.parallelism unit tests

Jonathan M Davis jmdavisProg at gmx.com
Thu Jun 2 00:10:26 PDT 2011


On 2011-05-28 18:41, David Simcha wrote:
> Thanks for letting me know.  I have no idea why this is happening.  I was
> seeing some weirdness on FreeBSD only, but I gave up trying to solve that
> until the FreeBSD port is more stable or I can reproduce it on some other
> OS.  I've run the unittests for std.parallelism on my (old) Athlon 64 X2
> tens of thousands of times on Linux 64 without any issues, so unfortunately
> this is going to be hard to debug.  Two questions:
> 
> 1.  Does it happen on the latest Git version or on the 2.053 release
> version?
> 
> 2.  Could you try to figure out which test is failing?

I added statements at the beginning and end of each unit test block, and when 
it segfaults, I get this:

std/parallelism.d(223)
std/parallelism.d(236)
std/parallelism.d(3155)
totalCPUs = 6
std/parallelism.d(3378)

So, that's the unit testblock that starts with

    poolInstance = new TaskPool(2);
    scope(exit) poolInstance.stop();

3378 is the line at the end of that unittest block, so I assume that there's 
either a destructor that's causing the problem or that poolInstance.stop() is 
causing the problem. Also, if it matters, it was running the unit tests in 
release mode when it died. However, I _have_ seen that test freeze while in 
debug mode (though it's quite possible that the program freezing and the 
segfault are completely separate). Also, the freeze definitely happens 
sometimes with 2.053, but I don't know if the segfault does. It happens 
infrequently enough that it's hard to tell. I expect that it does, but I 
haven't seen it yet. However, running dmd 2.053 (with the latest druntime and 
Phobos), I did get this test failure once:

core.exception.AssertError at std/parallelism.d(3244): [2, 4, 5, 6]

(which is probably 3241 if you don't have the extra print statements that I 
added at the beginning and end of the unittest blocks). But again, 
std.parallelism _usually_ succeeds, so it's kind of hard to know what's going 
on with the tests. I've seen them freeze after printing out totalCPUs = 6 (and 
before it gets to the end of that unittest block). I've seen it segfault. And 
I've seen that AssertError. So, it definitely has intermitent problems on my 
64-bit, 6-core AMD system with a pure 64-bit stack. How much that has to do 
with my system or the architecture, I have no idea, but _something_ in 
std.parallelism still needs to be ironed out.

- Jonathan M Davis


More information about the phobos mailing list