August 11, 2013 [Issue 10794] New: Unsynchronized access to data of syncronized class | ||||
---|---|---|---|---|
| ||||
http://d.puremagic.com/issues/show_bug.cgi?id=10794 Summary: Unsynchronized access to data of syncronized class Product: D Version: D2 Platform: All OS/Version: All Status: NEW Severity: normal Priority: P2 Component: DMD AssignedTo: nobody@puremagic.com ReportedBy: freeslave93@gmail.com --- Comment #0 from Roman <freeslave93@gmail.com> 2013-08-11 10:11:30 PDT --- Here is something similar to example from Alexandrescu's book (13.14.1 Temporary Protection == No Escape): import std.stdio; int* ptr; void sneaky(out int bar) { ptr = &bar; } synchronized class B { private int bar; public void foo() { sneaky(bar); } int getBar() { return bar; } void setBar(int b) { bar = b; } } void main() { auto b = new shared(B); b.setBar(5); b.foo(); *ptr = 6; writeln(*ptr); writeln(b.getBar()); } I just replaced 'ref' with 'out' and now it compiles fine. Is it suppose to work this way? I also wonder why we have to write 'new shared(NameOfClass)' when class is synchronized, although we can't create not shared instance of synchronized class. Was it designed to make code more explicit? -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- |
Copyright © 1999-2021 by the D Language Foundation