From 69cf2c36bc0f713aa8166ae2842285450e699881 Mon Sep 17 00:00:00 2001 From: Nicolas Luck Date: Thu, 5 Oct 2023 12:11:28 +0200 Subject: [PATCH] Deactivate tokio runtime respawning on interrupt --- src/machine/dispatch.rs | 26 ++++++++++++++++---------- src/machine/system_calls.rs | 9 +++++++-- 2 files changed, 23 insertions(+), 12 deletions(-) diff --git a/src/machine/dispatch.rs b/src/machine/dispatch.rs index 23fe7c02..771fe91f 100644 --- a/src/machine/dispatch.rs +++ b/src/machine/dispatch.rs @@ -5269,16 +5269,22 @@ impl Machine { self.machine_st.throw_interrupt_exception(); self.machine_st.backtrack(); - #[cfg(not(target_arch = "wasm32"))] - let runtime = tokio::runtime::Runtime::new().unwrap(); - #[cfg(target_arch = "wasm32")] - let runtime = tokio::runtime::Builder::new_current_thread() - .enable_all() - .build() - .unwrap(); - - let old_runtime = std::mem::replace(&mut self.runtime, runtime); - old_runtime.shutdown_background(); + // We have extracted controll over the Tokio runtime to the calling context for enabling library use case + // (see https://github.com/mthom/scryer-prolog/pull/1880) + // So we only have access to a runtime handle in here and can't shut it down. + // Since I'm not aware of the consequences of deactivating this new code which came in while PR 1880 + // was not merged, I'm only deactivating it for now. + + //#[cfg(not(target_arch = "wasm32"))] + //let runtime = tokio::runtime::Runtime::new().unwrap(); + //#[cfg(target_arch = "wasm32")] + //let runtime = tokio::runtime::Builder::new_current_thread() + // .enable_all() + // .build() + // .unwrap(); + + //let old_runtime = tokio::runtime::Handle::current(); + //old_runtime.shutdown_background(); } } Err(_) => unreachable!(), diff --git a/src/machine/system_calls.rs b/src/machine/system_calls.rs index 86fededf..5c482636 100644 --- a/src/machine/system_calls.rs +++ b/src/machine/system_calls.rs @@ -4615,8 +4615,13 @@ impl Machine { if interruption { self.machine_st.throw_interrupt_exception(); self.machine_st.backtrack(); - let old_runtime = std::mem::replace(&mut self.runtime, tokio::runtime::Runtime::new().unwrap()); - old_runtime.shutdown_background(); + // We have extracted controll over the Tokio runtime to the calling context for enabling library use case + // (see https://github.com/mthom/scryer-prolog/pull/1880) + // So we only have access to a runtime handle in here and can't shut it down. + // Since I'm not aware of the consequences of deactivating this new code which came in while PR 1880 + // was not merged, I'm only deactivating it for now. + //let old_runtime = std::mem::replace(&mut self.runtime, tokio::runtime::Runtime::new().unwrap()); + //old_runtime.shutdown_background(); break } } -- 2.54.0