Transparent ShutdownManager with cascading ShutdownTrackers (#6040)

* Idea for transparent ShutdownManager use

* Tracker hierarchies

* Fix wasm shutdown, convinience shutdown method
This commit is contained in:
Drazen Urch
2025-09-17 12:51:00 +02:00
committed by GitHub
parent 44ac5e1ced
commit aa1cad4422
13 changed files with 219 additions and 90 deletions
+2 -2
View File
@@ -28,7 +28,7 @@ use wasm_client_core::helpers::{
add_gateway, generate_new_client_keys, parse_recipient, parse_sender_tag,
};
use wasm_client_core::nym_task::connections::TransmissionLane;
use wasm_client_core::nym_task::ShutdownManager;
use wasm_client_core::nym_task::ShutdownTracker;
use wasm_client_core::storage::core_client_traits::FullWasmClientStorage;
use wasm_client_core::storage::wasm_client_traits::WasmClientStorage;
use wasm_client_core::storage::ClientStorage;
@@ -59,7 +59,7 @@ pub struct NymClient {
// even though we don't use graceful shutdowns, other components rely on existence of this struct
// and if it's dropped, everything will start going offline
_task_manager: ShutdownManager,
_task_manager: ShutdownTracker,
packet_type: PacketType,
}
+6 -6
View File
@@ -20,7 +20,7 @@ use wasm_client_core::client::base_client::{BaseClientBuilder, ClientInput, Clie
use wasm_client_core::client::inbound_messages::InputMessage;
use wasm_client_core::helpers::{add_gateway, generate_new_client_keys};
use wasm_client_core::nym_task::connections::TransmissionLane;
use wasm_client_core::nym_task::ShutdownManager;
use wasm_client_core::nym_task::ShutdownTracker;
use wasm_client_core::storage::core_client_traits::FullWasmClientStorage;
use wasm_client_core::storage::wasm_client_traits::WasmClientStorage;
use wasm_client_core::storage::ClientStorage;
@@ -41,7 +41,7 @@ pub struct MixFetchClient {
requests: ActiveRequests,
// this has to be guarded by a mutex to be able to disconnect with an immutable reference
_shutdown_manager: Mutex<ShutdownManager>,
_shutdown_manager: Mutex<ShutdownTracker>,
}
#[wasm_bindgen]
@@ -233,11 +233,11 @@ impl MixFetchClient {
self.invalidated.store(true, Ordering::Relaxed);
console_log!("sending shutdown signal");
let mut shutdown_guard = self._shutdown_manager.lock().await;
shutdown_guard.send_cancellation();
let shutdown_guard = self._shutdown_manager.lock().await;
shutdown_guard.clone_shutdown_token().cancel();
shutdown_guard.close_tracker();
console_log!("waiting for shutdown to complete");
shutdown_guard.run_until_shutdown().await;
shutdown_guard.wait_for_tracker().await;
self.requests.invalidate_all().await;