function is `@nogc` yet allocates closures with the GC work around!

workman workman at gmail.com
Tue Jan 11 15:20:00 UTC 2022


On Tuesday, 11 January 2022 at 13:32:58 UTC, Dennis wrote:
> On Tuesday, 11 January 2022 at 11:56:39 UTC, workman wrote:
>> Is there a workaround to made this work ?
>
> Make sure `doTask` takes a `scope` delegate.

Thanks, after add scope into doTask this work.


One more question:


The delegate in doTask is execute in a nogc nothrow native 
thread,  before goto doTask I yield fiber. when native thread 
work done I call the fiber to continue run it.


The fiber will never be touched before work done callback 
finished. The fiber always destroy after scope exit.

In the native thread I call the delegate closures, the closures 
runtime stack will use native thread stack since there is no 
fiber switch.  (bu it will read/write fiber stack vars), and all 
stack vars will be destroyed after delegate closures scope quit.


After modify fiber stack vars from native thread, then send 
message to D thread, D thread call fiber again,  from there it 
always access the updated fiber stack value?






More information about the Digitalmars-d mailing list