-----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/[email protected]
Comment #1 by gassa — 2016-04-21T15:46:07Z
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) {}
}
-----
Comment #2 by dlang-bugzilla — 2016-04-21T15:53:58Z
Issue 14511?
Comment #3 by gassa — 2016-04-21T16:00:56Z
(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.
Comment #4 by mihails.strasuns.contractor — 2017-04-06T11:35:35Z
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();
}
```
Comment #5 by github-bugzilla — 2017-04-06T18:21:59Z