January 13, 2023 [Issue 23624] New: Race condition in test runner for DMD | ||||
---|---|---|---|---|
| ||||
https://issues.dlang.org/show_bug.cgi?id=23624 Issue ID: 23624 Summary: Race condition in test runner for DMD Product: D Version: D2 Hardware: x86_64 OS: Linux Status: NEW Severity: normal Priority: P1 Component: tools Assignee: nobody@puremagic.com Reporter: tim.dlang@t-online.de The test runner for DMD uses parallel foreach (https://github.com/dlang/dmd/blob/deb039f5f6740d4df0f09226d4ee02c450f75658/compiler/test/run.d#L189): foreach (target; parallel(targets, 1)) { log("run: %-(%s %)", target.args); int status = spawnProcess(target.args, env, Config.none, scriptDir).wait; if (status != 0) { const string name = target.filename ? target.normalizedTestName : "`unit` tests"; writeln(">>> TARGET FAILED: ", name); failedTargets ~= name; } } Appending to failedTargets inside the loop body could be a race condition, because parallel can run the loop body from different threads. This could result in a wrong value for failedTargets or crash the test runner. I don't know if this happens in practice, though. -- |
Copyright © 1999-2021 by the D Language Foundation