digitalmars.D.bugs - [Issue 2162] New: Access violation when threads run closures
- d-bugmail puremagic.com (56/56) Jun 22 2008 http://d.puremagic.com/issues/show_bug.cgi?id=2162
- d-bugmail puremagic.com (20/20) Oct 03 2008 http://d.puremagic.com/issues/show_bug.cgi?id=2162
- d-bugmail puremagic.com (11/11) May 24 2011 http://d.puremagic.com/issues/show_bug.cgi?id=2162
http://d.puremagic.com/issues/show_bug.cgi?id=2162 Summary: Access violation when threads run closures Product: D Version: 2.016 Platform: PC OS/Version: Windows Status: NEW Severity: normal Priority: P2 Component: Phobos AssignedTo: bugzilla digitalmars.com ReportedBy: bartosz relisoft.com Passing closures to threads might be considered an error, but the current thread implementation virtualy encourages it. The program below behaves erratically--the starting value of x and y inside thread functions is random and, at leas in my environment, the program access violates. (I'm not sure how reproducible it is). void test(ref Thread thr1, ref Thread thr2) { int x, y; int run1() { writeln("Run1 ", x); for(int i = 0; i < 100000; ++i) ++x; writeln("End Run1 ", x); return 0; } int run2() { writeln("Run2 ", y); for(int i = 0; i < 100000; ++i) ++y; writeln("End Run2 ", y); return 0; } thr1 = new Thread(&run1); thr2 = new Thread(&run2); } void main() { try { Thread thr1, thr2; test(thr1, thr2); thr1.start(); thr2.start(); thr1.wait(); thr2.wait(); } catch(Exception e) { writeln ("Exception in main: ", e.toString); } } --
Jun 22 2008
http://d.puremagic.com/issues/show_bug.cgi?id=2162 brunodomedeiros+bugz gmail.com changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |brunodomedeiros+bugz gmail.c | |om Bump! I've recently run into this as well. The problem happens when the context of the passed delegate is in the stack. If the context of the passed delegate is in the heap, all is fine. If you add this code to th end of test(): ... thr1 = new Thread(&run1); thr2 = new Thread(&run2); auto dummy = (&run1); } --- The program will run correctly, as the context will be on the heap. So I think the problem might just be incorrect closure detection? --
Oct 03 2008
http://d.puremagic.com/issues/show_bug.cgi?id=2162 Andrej Mitrovic <andrej.mitrovich gmail.com> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |andrej.mitrovich gmail.com 22:45:34 PDT --- In 2.053 it will deny compiling this as it detects that run1 and run2 are delegates. -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
May 24 2011