On Tuesday, 11 July 2017 at 22:59:42 UTC, Igor Shirkalin wrote:
On Tuesday, 11 July 2017 at 06:18:44 UTC, Biotronic wrote:
On Monday, 10 July 2017 at 20:03:32 UTC, Igor Shirkalin wrote:
[...]

If DRuntime is not made aware of the thread's existence, the thread will not be stopped by the GC, and the GC might collect memory that the thread is referencing on the stack or in non-GC memory. Anything allocated by the GC would still be scanned.

To inform DRuntime about your thread, you should call thread_attachThis:

https://dlang.org/phobos/core_thread.html#.thread_attachThis

As pointed out in the documentation of thread_attachThis, you might also want to call rt_moduleTlsCtor, to run thread local static constructors. Depending on your usage, this might not be necessary.

--
  Biotronic

Thanks for very useful information!

Just one small note.
If you don't know the foreign thread lifetime, it's cleaner to detach it from the runtime upon exit.

Else may fall in the following scenario.
1. you register thread A
2. thread A is destroyed later on, in the C++ code
3. another thread B come into your callback and allocate. The GC triggers and try to pause a non-existing thread A.

Reply via email to