@@ -17,7 +17,7 @@ use std::{
1717
1818use futures:: future:: BoxFuture ;
1919use virtual_net:: { DynVirtualNetworking , VirtualNetworking } ;
20- use wasmer:: { CompileError , Module , RuntimeError } ;
20+ use wasmer:: { CompileError , Engine , Module , RuntimeError } ;
2121use wasmer_wasix_types:: wasi:: ExitCode ;
2222
2323#[ cfg( feature = "journal" ) ]
@@ -76,14 +76,14 @@ where
7676 fn source ( & self ) -> Arc < dyn Source + Send + Sync > ;
7777
7878 /// Get a [`wasmer::Engine`] for module compilation.
79- fn engine ( & self ) -> wasmer :: Engine {
80- wasmer :: Engine :: default ( )
79+ fn engine ( & self ) -> Engine {
80+ Engine :: default ( )
8181 }
8282
8383 fn engine_with_suggested_opts (
8484 & self ,
8585 suggested_opts : & SuggestedCompilerOptimizations ,
86- ) -> Result < wasmer :: Engine , CompileError > {
86+ ) -> Result < Engine , CompileError > {
8787 let mut engine = self . engine ( ) ;
8888 engine. with_opts ( & WasmerSuggestedCompilerOptimizations {
8989 pass_params : suggested_opts. pass_params ,
@@ -157,7 +157,7 @@ where
157157 fn load_module < ' a > ( & ' a self , wasm : & ' a [ u8 ] ) -> BoxFuture < ' a , Result < Module , SpawnError > > {
158158 let engine = self . engine ( ) ;
159159 let module_cache = self . module_cache ( ) ;
160- let data = HashedModuleData :: new_xxhash ( wasm. to_vec ( ) ) ;
160+ let data = HashedModuleData :: new ( wasm. to_vec ( ) ) ;
161161 let task = async move { load_module ( & engine, & module_cache, & data) . await } ;
162162 Box :: pin ( task)
163163 }
@@ -178,16 +178,21 @@ where
178178 fn load_hashed_module (
179179 & self ,
180180 module : HashedModuleData ,
181+ engine : Option < & Engine > ,
181182 ) -> BoxFuture < ' _ , Result < Module , SpawnError > > {
182- let engine = self . engine ( ) ;
183+ let engine = engine . cloned ( ) . unwrap_or_else ( || self . engine ( ) ) ;
183184 let module_cache = self . module_cache ( ) ;
184185 let task = async move { load_module ( & engine, & module_cache, & module) . await } ;
185186 Box :: pin ( task)
186187 }
187188
188189 /// Synchronous version of [`Self::load_hashed_module`].
189- fn load_hashed_module_sync ( & self , wasm : HashedModuleData ) -> Result < Module , SpawnError > {
190- InlineWaker :: block_on ( self . load_hashed_module ( wasm) )
190+ fn load_hashed_module_sync (
191+ & self ,
192+ wasm : HashedModuleData ,
193+ engine : Option < & Engine > ,
194+ ) -> Result < Module , SpawnError > {
195+ InlineWaker :: block_on ( self . load_hashed_module ( wasm, engine) )
191196 }
192197
193198 /// Callback thats invokes whenever the instance is tainted, tainting can occur
@@ -223,7 +228,7 @@ pub type DynRuntime = dyn Runtime + Send + Sync;
223228// implementing [`Runtime::load_module`], so custom logic can be added on top.
224229#[ tracing:: instrument( level = "debug" , skip_all) ]
225230pub async fn load_module (
226- engine : & wasmer :: Engine ,
231+ engine : & Engine ,
227232 module_cache : & ( dyn ModuleCache + Send + Sync ) ,
228233 module : & HashedModuleData ,
229234) -> Result < Module , crate :: SpawnError > {
@@ -291,7 +296,7 @@ pub struct PluggableRuntime {
291296 pub http_client : Option < DynHttpClient > ,
292297 pub package_loader : Arc < dyn PackageLoader + Send + Sync > ,
293298 pub source : Arc < dyn Source + Send + Sync > ,
294- pub engine : wasmer :: Engine ,
299+ pub engine : Engine ,
295300 pub module_cache : Arc < dyn ModuleCache + Send + Sync > ,
296301 pub tty : Option < Arc < dyn TtyBridge + Send + Sync > > ,
297302 #[ cfg( feature = "journal" ) ]
@@ -347,7 +352,7 @@ impl PluggableRuntime {
347352 self
348353 }
349354
350- pub fn set_engine ( & mut self , engine : wasmer :: Engine ) -> & mut Self {
355+ pub fn set_engine ( & mut self , engine : Engine ) -> & mut Self {
351356 self . engine = engine;
352357 self
353358 }
@@ -416,7 +421,7 @@ impl Runtime for PluggableRuntime {
416421 Arc :: clone ( & self . source )
417422 }
418423
419- fn engine ( & self ) -> wasmer :: Engine {
424+ fn engine ( & self ) -> Engine {
420425 self . engine . clone ( )
421426 }
422427
@@ -462,7 +467,7 @@ pub struct OverriddenRuntime {
462467 http_client : Option < DynHttpClient > ,
463468 package_loader : Option < Arc < dyn PackageLoader + Send + Sync > > ,
464469 source : Option < Arc < dyn Source + Send + Sync > > ,
465- engine : Option < wasmer :: Engine > ,
470+ engine : Option < Engine > ,
466471 module_cache : Option < Arc < dyn ModuleCache + Send + Sync > > ,
467472 tty : Option < Arc < dyn TtyBridge + Send + Sync > > ,
468473 #[ cfg( feature = "journal" ) ]
@@ -518,7 +523,7 @@ impl OverriddenRuntime {
518523 self
519524 }
520525
521- pub fn with_engine ( mut self , engine : wasmer :: Engine ) -> Self {
526+ pub fn with_engine ( mut self , engine : Engine ) -> Self {
522527 self . engine . replace ( engine) ;
523528 self
524529 }
@@ -587,7 +592,7 @@ impl Runtime for OverriddenRuntime {
587592 }
588593 }
589594
590- fn engine ( & self ) -> wasmer :: Engine {
595+ fn engine ( & self ) -> Engine {
591596 if let Some ( engine) = self . engine . clone ( ) {
592597 engine
593598 } else {
@@ -646,17 +651,16 @@ impl Runtime for OverriddenRuntime {
646651 }
647652 }
648653
649- fn load_module < ' a > ( & ' a self , wasm : & ' a [ u8 ] ) -> BoxFuture < ' a , Result < Module , SpawnError > > {
650- if self . engine . is_some ( ) || self . module_cache . is_some ( ) {
651- let engine = self . engine ( ) ;
652- let module_cache = self . module_cache ( ) ;
653-
654- let data = HashedModuleData :: new_xxhash ( wasm. to_vec ( ) ) ;
655- let task = async move { load_module ( & engine, & module_cache, & data) . await } ;
654+ fn load_module < ' a > ( & ' a self , data : & [ u8 ] ) -> BoxFuture < ' a , Result < Module , SpawnError > > {
655+ #[ allow( deprecated) ]
656+ if let ( Some ( engine) , Some ( module_cache) ) = ( & self . engine , self . module_cache . clone ( ) ) {
657+ let engine = engine. clone ( ) ;
658+ let hashed_data = HashedModuleData :: new ( data. to_vec ( ) ) ;
659+ let task = async move { load_module ( & engine, & module_cache, & hashed_data) . await } ;
656660 Box :: pin ( task)
657661 } else {
658- # [ allow ( deprecated ) ]
659- self . inner . load_module ( wasm )
662+ let data = data . to_vec ( ) ;
663+ Box :: pin ( async move { self . inner . load_module ( & data ) . await } )
660664 }
661665 }
662666
@@ -672,22 +676,27 @@ impl Runtime for OverriddenRuntime {
672676 fn load_hashed_module (
673677 & self ,
674678 data : HashedModuleData ,
679+ engine : Option < & Engine > ,
675680 ) -> BoxFuture < ' _ , Result < Module , SpawnError > > {
676681 if self . engine . is_some ( ) || self . module_cache . is_some ( ) {
677682 let engine = self . engine ( ) ;
678683 let module_cache = self . module_cache ( ) ;
679684 let task = async move { load_module ( & engine, & module_cache, & data) . await } ;
680685 Box :: pin ( task)
681686 } else {
682- self . inner . load_hashed_module ( data)
687+ self . inner . load_hashed_module ( data, engine )
683688 }
684689 }
685690
686- fn load_hashed_module_sync ( & self , wasm : HashedModuleData ) -> Result < Module , SpawnError > {
691+ fn load_hashed_module_sync (
692+ & self ,
693+ wasm : HashedModuleData ,
694+ engine : Option < & Engine > ,
695+ ) -> Result < Module , SpawnError > {
687696 if self . engine . is_some ( ) || self . module_cache . is_some ( ) {
688- InlineWaker :: block_on ( self . load_hashed_module ( wasm) )
697+ InlineWaker :: block_on ( self . load_hashed_module ( wasm, engine ) )
689698 } else {
690- self . inner . load_hashed_module_sync ( wasm)
699+ self . inner . load_hashed_module_sync ( wasm, engine )
691700 }
692701 }
693702}
0 commit comments