-----prfail1.d----- import std.concurrency; void someWork () {auto x = [1];} void main () {spawn (&someWork);} ----- The above program crashes with 2.071.0 down to 2.069.0 but still works on 2.068.2. The command line is "dmd -g -profile=gc prfail1.d" on Windows (compiled to 32-bit by default). The crash happens almost always, >90% of runs of the compiled program. Here's the error output: ----- object.Error@(0): Access Violation ---------------- 0x00409651 in nothrow int rt.profilegc._staticDtor407().__foreachbody2(ref immutable(char)[], ref rt.profilegc.Entry) 0x00409986 in void rt.profilegc.__moddtor() 0x00427444 in __threadstartex 0x77869ED2 in RtlInitializeExceptionChain 0x77869EA5 in RtlInitializeExceptionChain ----- With added "-m64", it just crashes and does not print anything. This issue report originated as a forum post: https://forum.dlang.org/post/vsjllasdndfrhhziiece@forum.dlang.org
Interestingly, a modified version does not crash: -----prfail2.d----- import std.concurrency; void someWork () {auto x = [1];} void main () {spawn (&someWork); someWork ();} ----- I was curious if this guarantees that the spawned thread finishes before the main thread, but the third example, also crashing, seems to contradict that: -----prfail3.d----- import std.concurrency; void someWork () {auto x = [1];} void main () { spawnLinked (&someWork); try {receive ((int) {});} catch (LinkTerminated o) {} } -----
Issue 14511?
(In reply to Vladimir Panteleev from comment #2) > Issue 14511? The details are different, but perhaps the cause is the same. I was hesitant to put this as a comment for 14511 because "-profile" and "-profile=gc" are of unknown relation to me, and 14511 seems to be about "-profile" initially.
This sample is sufficient to reproduce the crash for me with -profile=gc : --- void main ( ) { import core.thread; auto t = new Thread({ auto x = new int; }).start(); } ```
Commit pushed to stable at https://github.com/dlang/druntime https://github.com/dlang/druntime/commit/08835c01cf2d64a06c53739223edba55cc23db2f Simple multithreaded program + "-profile=gc" = crash Fixes issue 15947 (https://issues.dlang.org/show_bug.cgi?id=15947) Fixes issue 14511 (https://issues.dlang.org/show_bug.cgi?id=14511) Root problem was trying to increment non-existent AA field upon merging profile stats. The code was also simplified to remove unnecessary condition.
Commit pushed to master at https://github.com/dlang/druntime https://github.com/dlang/druntime/commit/08835c01cf2d64a06c53739223edba55cc23db2f Simple multithreaded program + "-profile=gc" = crash
Commit pushed to newCTFE at https://github.com/dlang/druntime https://github.com/dlang/druntime/commit/08835c01cf2d64a06c53739223edba55cc23db2f Simple multithreaded program + "-profile=gc" = crash