From 2f80ba408ac682d5af7fc6600c9433996fe45518 Mon Sep 17 00:00:00 2001 From: Sunli Date: Mon, 9 Sep 2024 10:24:41 +0800 Subject: [PATCH] Set the stack size of the main thread to 8M (#227) For fix stack overflow issue on Windows. --- crates/app/src/main.rs | 70 +++++++++++++++++++++++------------------- 1 file changed, 38 insertions(+), 32 deletions(-) diff --git a/crates/app/src/main.rs b/crates/app/src/main.rs index 41027bc1..309f7776 100644 --- a/crates/app/src/main.rs +++ b/crates/app/src/main.rs @@ -1,4 +1,4 @@ -use std::sync::Arc; +use std::{sync::Arc, thread}; use anyhow::Result; use app_state::AppState; @@ -21,44 +21,50 @@ fn init(app_state: Arc, cx: &mut AppContext) -> Result<()> { } fn main() { - let app_state = Arc::new(AppState {}); + let join_handle = thread::Builder::new() + .stack_size(8 * 1024 * 1024) // Set the stack size to 8MB + .spawn(|| { + let app_state = Arc::new(AppState {}); - let app = App::new().with_assets(Assets); + let app = App::new().with_assets(Assets); - app.run(move |cx| { - AppState::set_global(Arc::downgrade(&app_state), cx); + app.run(move |cx| { + AppState::set_global(Arc::downgrade(&app_state), cx); - if let Err(e) = init(app_state.clone(), cx) { - log::error!("{}", e); - return; - } + if let Err(e) = init(app_state.clone(), cx) { + log::error!("{}", e); + return; + } - cx.on_action(quit); + cx.on_action(quit); - cx.set_menus(vec![ - Menu { - name: "GPUI App".into(), - items: vec![MenuItem::action("Quit", Quit)], - }, - Menu { - name: "Edit".into(), - items: vec![ - MenuItem::os_action("Undo", Undo, gpui::OsAction::Undo), - MenuItem::os_action("Redo", Redo, gpui::OsAction::Redo), - MenuItem::separator(), - MenuItem::os_action("Cut", Cut, gpui::OsAction::Cut), - MenuItem::os_action("Copy", Copy, gpui::OsAction::Copy), - MenuItem::os_action("Paste", Paste, gpui::OsAction::Paste), - ], - }, - ]); - cx.activate(true); + cx.set_menus(vec![ + Menu { + name: "GPUI App".into(), + items: vec![MenuItem::action("Quit", Quit)], + }, + Menu { + name: "Edit".into(), + items: vec![ + MenuItem::os_action("Undo", Undo, gpui::OsAction::Undo), + MenuItem::os_action("Redo", Redo, gpui::OsAction::Redo), + MenuItem::separator(), + MenuItem::os_action("Cut", Cut, gpui::OsAction::Cut), + MenuItem::os_action("Copy", Copy, gpui::OsAction::Copy), + MenuItem::os_action("Paste", Paste, gpui::OsAction::Paste), + ], + }, + ]); + cx.activate(true); - story_workspace::open_new(app_state.clone(), cx, |_workspace, _cx| { - // do something + story_workspace::open_new(app_state.clone(), cx, |_workspace, _cx| { + // do something + }) + .detach(); + }); }) - .detach(); - }); + .unwrap(); + join_handle.join().unwrap(); } fn quit(_: &Quit, cx: &mut AppContext) {