Can't send messages to tid spawned in a Windows DLL. Bug?

Atila Neves via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Thu Feb 16 07:38:55 PST 2017


On Thursday, 16 February 2017 at 15:14:25 UTC, kinke wrote:
> On Thursday, 16 February 2017 at 12:07:40 UTC, Atila Neves 
> wrote:
>> This fails for me in a DLL:
>>
>> auto tid = spawn(&func);
>> assert(tid != Tid.init);
>>
>> If I print out the tid, I find that its message box is null. 
>> This is odd, since according the code in std.concurrency 
>> there's nothing weird about how it gets a message box, it's 
>> just `auto spawnTid = Tid(new MessageBox);`. So... `new` is 
>> returning null???
>>
>> The really weird thing is that a thread is spawned and func 
>> starts executing. I just can't send it any messages without 
>> crashing.
>>
>> Atila
>
> If you suspect `new` of returning null, a GC issue seems 
> likely. Is your DLL linked statically against druntime, thus 
> having its own GC? Or are you using a shared druntime (and thus 
> GC) across multiple binaries?

Whatever's default on Windows 32-bit. The thing is, all other 
uses of GC allocations in the same DLL work as expected.

Atila


More information about the Digitalmars-d-learn mailing list