https://issues.dlang.org/show_bug.cgi?id=17797
Issue ID: 17797 Summary: [REG 2.073.2] double print to stdout when reading stdin in another thread Product: D Version: D2 Hardware: x86 OS: Windows Status: NEW Severity: regression Priority: P1 Component: dmd Assignee: nob...@puremagic.com Reporter: ga...@mail.ru Consider the following program: ----- import std.stdio, core.thread; void main(){ auto thread = new Thread(&func).start; writeln("Output"); writeln("Output2"); writeln("Output3"); while(true){} } void func(){ foreach(line; stdin.byLineCopy){} } ----- The correct output is: ----- Output Output2 Output3 ----- This starts a thread to read from stdin, and then writes several lines to stdout in the main thread and enters and infinite loop. When compiled with dmd 2.073.1 or earlier, everything is fine. Starting from dmd 2.073.2, the output is unstable but usually not correct. Locally, I usually observe the following output: ----- Output Output2 Output3 Output2 ----- Or sometimes: ----- Output Output2 Output2 Output3 ----- Here are the steps to reproduce, tested on 64-bit Windows with a 32-bit compiler. 1. Use dmd 2.073.2 or later. 2. Compile like "dmd program.d" (compiler switches don't seem to matter). 3. Run a command prompt, like "cmd.exe". 4. Execute "program.exe" (importantly, without any I/O redirection). Original thread at D.Learn: https://forum.dlang.org/post/ozbhjgvqmurphkeos...@forum.dlang.org --