Fix 3: optimize shutdown times

This commit is contained in:
Sebastian authored and Hakan Seven committed 2026-06-25 00:01:36 +03:00
1 parent 8eb199bfc7
commit a93d425002
4 files changed
+128 -21

No files matched your search

+10
View File
@@ -2139,6 +2139,16 @@ pub fn run() -> iced::Result {
.run()
}
impl Drop for OpenCADStudio {
fn drop(&mut self) {
// Kill plugin runner processes as soon as the application state is
// dropped, instead of waiting for the thread-local manager destructor.
// This makes host shutdown deterministic and fast on every exit path.
#[cfg(not(target_arch = "wasm32"))]
crate::plugin::external::shutdown_plugins();
}
}
/// Single-window entry for the web (wasm) build. Uses `iced::application`
/// instead of `iced::daemon`: the browser canvas is the only window, so the
/// main-window view is rendered directly and the manager/dialog windows are
+10 -1
View File
@@ -221,7 +221,7 @@ fn parse_string_array(s: &str) -> Vec<String> {
// ── Runtime loading (desktop only) ──────────────────────────────────────────
#[cfg(not(target_arch = "wasm32"))]
pub(crate) use loader::with_manager;
pub(crate) use loader::{shutdown_plugins, with_manager};
#[cfg(all(not(target_arch = "wasm32"), not(test)))]
pub(crate) use loader::{load_at_startup, loaded_ids};
@@ -285,6 +285,15 @@ mod loader {
})
}
/// Eagerly shut down all plugin runner processes.
pub fn shutdown_plugins() {
MANAGER.with(|m| {
if let Some(mut manager) = m.borrow_mut().take() {
manager.shutdown_all();
}
});
}
/// Path to the native library beside `plugin.toml`, if any.
fn lib_file(dir: &Path) -> Option<PathBuf> {
let ext = lib_extension();