[Issue 17797] New: [REG 2.073.2] double print to stdout when reading stdin in another thread
via Digitalmars-d-bugs
digitalmars-d-bugs at puremagic.com
Thu Aug 31 06:40:19 PDT 2017
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: nobody at puremagic.com
Reporter: gassa at 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/ozbhjgvqmurphkeosrpf@forum.dlang.org
--
More information about the Digitalmars-d-bugs
mailing list