Remove global state for trap registration (#909)
* Remove global state for trap registration There's a number of changes brought about in this commit, motivated by a few things. One motivation was to remove an instance of using `lazy_static!` in an effort to remove global state and encapsulate it wherever possible. A second motivation came when investigating a slowly-compiling wasm module (a bit too slowly) where a good chunk of time was spent in managing trap registrations. The specific change made here is that `TrapRegistry` is now stored inside of a `Compiler` instead of inside a global. Additionally traps are "bulk registered" for a module rather than one-by-one. This form of bulk-registration allows optimizing the locks used here, where a lock is only held for a module at-a-time instead of once-per-function. With these changes the "unregister" logic has also been tweaked a bit here and there to continue to work. As a nice side effect the `Compiler` type now has one fewer field that requires actual mutability and has been updated for multi-threaded compilation, nudging us closer to a world where we can support multi-threaded compilation. Yay! In terms of performance improvements, a local wasm test file that previously took 3 seconds to compile is now 10% faster to compile, taking ~2.7 seconds now. * Perform trap resolution after unwinding This avoids taking locks in signal handlers which feels a bit iffy... * Remove `TrapRegistration::dummy()` Avoid an case where you're trying to lookup trap information from a dummy module for something that happened in a different module. * Tweak some comments
This commit is contained in:
@@ -287,7 +287,7 @@ pub fn create_handle_with_function(
|
||||
|
||||
create_handle(
|
||||
module,
|
||||
Some(store),
|
||||
store,
|
||||
finished_functions,
|
||||
Box::new(trampoline_state),
|
||||
)
|
||||
@@ -322,5 +322,5 @@ pub unsafe fn create_handle_with_raw_function(
|
||||
.insert("trampoline".to_string(), Export::Function(func_id));
|
||||
finished_functions.push(func);
|
||||
|
||||
create_handle(module, Some(store), finished_functions, state)
|
||||
create_handle(module, store, finished_functions, state)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user