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
Host app instantiates module, run _initialize/__wasm_call_dtors
Calls some functions
Closes the module, run /__wasm_call_dtors to release resources correctly
In current model, commands should not preserve state, it's one-call entities
Reactors can be initialised then called multiple times, but it's rely on root command for destructors. If we define dtors in reactor itself, it can broke command, that uses it.
For now, clang from wasi-sdk-21 (Rust too?) do not emits destructors code for reactor at all, only registers with __cxa_atexit. There should be a way to deinstantiate that type of module correctly. Maybe, some compiler flag on another exec model?
Upd: Ok, if i define some function, that calls __wasm_call_dtors directly, with -mexec-model=reactor it works as expected. Is it well-defined behavior? lld do not checks, that function is somehow exported, and can just strip it with '-Os', but leave __wasm_call_dtors in place.
The text was updated successfully, but these errors were encountered:
What kinds of cleanups does your code need to do? In some contexts, reactors are terminated abruptly by simply exiting the host process, which wouldn't give the Wasm code a chance to run any destructors. And if Wasm code traps, then it wouldn't be safe to re-enter it to call destructors for cleanups.
In WASIp2 with the component model, resources can have destructors that can automatically clean up external resources associated with handles, and that lets us clean up even in the case of abrupt exits such as traps.
Example usage model:
_initialize
/__wasm_call_dtors
__wasm_call_dtors
to release resources correctlyIn current model, commands should not preserve state, it's one-call entities
Reactors can be initialised then called multiple times, but it's rely on root command for destructors. If we define dtors in reactor itself, it can broke command, that uses it.
For now, clang from wasi-sdk-21 (Rust too?) do not emits destructors code for reactor at all, only registers with
__cxa_atexit
. There should be a way to deinstantiate that type of module correctly. Maybe, some compiler flag on another exec model?Upd: Ok, if i define some function, that calls
__wasm_call_dtors
directly, with-mexec-model=reactor
it works as expected. Is it well-defined behavior? lld do not checks, that function is somehow exported, and can just strip it with '-Os', but leave__wasm_call_dtors
in place.The text was updated successfully, but these errors were encountered: