You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
We now omit recursive reentrance checks entirely when generating fused adapters
for components which cannot possibly recursively reenter themselves, noting that
components which only contain modules in leaf (sub)components fall into that
category.
However, we must still include a runtime global variable check-and-set to
enforce the may-block rules for sync-typed tasks. With some more effort, we
could also eliminate those for components statically known to never make
blocking calls to intrinsics or imports.
The implementation of the may-block check centers around a
per-top-level-instance global variable called `task_may_block`, which we update
each time we switch threads and tasks, as well as whenever `task.return` or
`task.cancel` is called. This required shuffling some code around and creating
a new `StoreOpaque::set_thread` function which encapsulates switching threads
and updating `task_may_block` for the old and new instances.
0 commit comments