digitalmars.D.bugs - [Issue 1828] New: Several Thread Issues
- d-bugmail puremagic.com (37/40) Feb 11 2008 http://d.puremagic.com/issues/show_bug.cgi?id=1828
- d-bugmail puremagic.com (6/6) Feb 11 2008 http://d.puremagic.com/issues/show_bug.cgi?id=1828
- d-bugmail puremagic.com (12/12) Feb 28 2008 http://d.puremagic.com/issues/show_bug.cgi?id=1828
- d-bugmail puremagic.com (10/10) Feb 28 2008 http://d.puremagic.com/issues/show_bug.cgi?id=1828
- d-bugmail puremagic.com (9/9) Mar 06 2008 http://d.puremagic.com/issues/show_bug.cgi?id=1828
http://d.puremagic.com/issues/show_bug.cgi?id=1828 Summary: Several Thread Issues Product: D Version: 2.010 Platform: PC OS/Version: Windows Status: NEW Keywords: patch Severity: normal Priority: P2 Component: DMD AssignedTo: bugzilla digitalmars.com ReportedBy: kinaba is.s.u-tokyo.ac.jp // Credit goes to http://pc11.2ch.net/test/read.cgi/tech/1202623572/30-35n There are several problems in std.thread. Please find attached the patch to fix all of them. 1. Thread.startstate = TS.RUNNING; hdl = _beginthreadex(null, cast(uint)stacksize, &threadstart, cast(void*)this, 0, &id);If context-switch occurs between these two lines, thread which acutually is not running is treated as TS.RUNNING. This causes problems, for example in pauseAll(). So these lines should be property synchronized.if (hdl == cast(thread_hdl)0)When _beginthreadex fails and this branch is taken, the variable nthread should be decremented. 2. std.wait timeouts When a call to wait() timeouts (not fails), > dw = WaitForSingleObject(hdl, 0xFFFFFFFF); > state = TS.FINISHED; the current implemetation treats it as it fails. But in this case, the thread is indeed still alive and may wake up again just after the "state = TS.FINISHED" statement. If that happens, pauseAll() do not stop the thread (because it's TS.FINISHED) and multiple threads may unintendedly run parallel. This IS a problem for std.gc, which is relying on the assumption that pauseAll() stops all but gc threads. 3. Priority It is convenient if one can set the NORMAL thread priority. --
Feb 11 2008
http://d.puremagic.com/issues/show_bug.cgi?id=1828 Created an attachment (id=226) --> (http://d.puremagic.com/issues/attachment.cgi?id=226&action=view) Patch to fix the issue --
Feb 11 2008
http://d.puremagic.com/issues/show_bug.cgi?id=1828 sjguy cs.unc.edu changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |sjguy cs.unc.edu I applied this patch and it fixed an issue I was having. My program would eventually crash with either a "Win32 Error" or a "Error: Cannot Pause" error. This seemed to happen when my compute intensive threads were garbage collected, presumable for the exact reason Kazuhiro Inaba stated. Since recompiling Phobos with this patch, I have not encountered either error. --
Feb 28 2008
http://d.puremagic.com/issues/show_bug.cgi?id=1828 spam extrawurst.org changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |spam extrawurst.org Severity|normal |critical pretty please apply this patch in the next release. i am encountering these mutlithreading crashes due to the GC, too. --
Feb 28 2008
http://d.puremagic.com/issues/show_bug.cgi?id=1828 bugzilla digitalmars.com changed: What |Removed |Added ---------------------------------------------------------------------------- Status|NEW |RESOLVED Resolution| |FIXED Fixed dmd 1.028 and 2.012 (and thanks for sorting this out) --
Mar 06 2008