diff --git a/.changes/fix-context-stack-size.md b/.changes/fix-context-stack-size.md new file mode 100644 index 000000000000..72c2aba66d5c --- /dev/null +++ b/.changes/fix-context-stack-size.md @@ -0,0 +1,5 @@ +--- +"tauri-codegen": patch:bug +--- + +Generate context in a separate thread to prevent a stack overflow. diff --git a/core/tauri-codegen/src/context.rs b/core/tauri-codegen/src/context.rs index fd06092f301d..ecbbc136023b 100644 --- a/core/tauri-codegen/src/context.rs +++ b/core/tauri-codegen/src/context.rs @@ -489,7 +489,7 @@ pub fn context_codegen(data: ContextData) -> EmbeddedAssetsResult { quote!() }; - Ok(quote!({ + let context = quote!({ #[allow(unused_mut, clippy::let_and_return)] let mut context = #root::Context::new( #config, @@ -507,6 +507,22 @@ pub fn context_codegen(data: ContextData) -> EmbeddedAssetsResult { #maybe_config_parent_setter context + }); + + Ok(quote!({ + let thread = ::std::thread::Builder::new() + .name(String::from("generated tauri context creation")) + .stack_size(8 * 1024 * 1024) + .spawn(|| #context) + .expect("unable to create thread with 8MiB stack"); + + match thread.join() { + Ok(context) => context, + Err(_) => { + eprintln!("the generated Tauri `Context` panicked during creation"); + ::std::process::exit(101); + } + } })) }