digitalmars.D.bugs - [Issue 18359] New: writeln and synchronized classes don't sync
- d-bugmail puremagic.com (71/78) Feb 02 2018 https://issues.dlang.org/show_bug.cgi?id=18359
https://issues.dlang.org/show_bug.cgi?id=18359 Issue ID: 18359 Summary: writeln and synchronized classes don't sync properly Product: D Version: D2 Hardware: x86_64 URL: http://dlang.org/ OS: Windows Status: NEW Severity: normal Priority: P3 Component: dmd Assignee: nobody puremagic.com Reporter: weltensturm gmail.com Created attachment 1679 --> https://issues.dlang.org/attachment.cgi?id=1679&action=edit Synchronized fails Using this code: import core.thread, std.stdio, std.range, std.algorithm; void main(){ Thread[] threads; iota(0,20).each!((i){ threads ~= new Thread({ writeln(i); }); }); foreach(t; threads) t.start; foreach(t; threads) t.join; } writeln gets confused, printing this: 0 2 3 3 4 5 5 6 7 8 8 9 10 11 12 13 14 14 15 16 18 19 17 It works fine with LDC2. Additionally, when running the following through a Visual Studio Code terminal: while(true) writeln("something"); (using code-d, I think it embeds a PowerShell) writeln breaks with an access violation:[error] object.Error (0): Access Violation ---------------- 0x0053FA35 in write 0x00539FF5 in fflush 0x0046A9EA in safe void std.stdio.File.LockingTextWriter.put!(char).put(char) at src\phobos\std\stdio.d(2876) 0x00435867 in safe void std.range.primitives.doPut!(std.stdio.File.LockingTextWriter, char).doPut(ref std.stdio.File.LockingTextWriter, ref char) at src\phobos\std\range\primitives.d(287) ...It also looks like synchronized class does not synchronize method bodies correctly. I couldn't get a small example to fail, but I'll attach 180 lines that do. It works when building with LDC or wrapping the method bodies in synchronized(this){...}. (It also shows writeln going crazy) Using Windows 10 x64, DMD32 v2.078.1, building with dub and rdmd --
Feb 02 2018