Mountain/Binary/Shutdown/
SchedulerShutdown.rs

1//! # Scheduler Shutdown Module
2//!
3//! Handles graceful shutdown of the Echo task scheduler.
4
5use std::sync::Arc;
6
7use log::{debug, error, info};
8use Echo::Scheduler::Scheduler::Scheduler;
9
10/// Stops the Echo task scheduler and cleans up its resources.
11///
12/// # Arguments
13///
14/// * `SchedulerForShutdown` - Arc-wrapped scheduler to shut down
15///
16/// # Returns
17///
18/// A `Result` indicating success or failure.
19///
20/// # Shutdown Process
21///
22/// This function performs:
23/// - Stops accepting new tasks
24/// - Completes in-progress tasks
25/// - Cleans up scheduler resources
26///
27/// # Errors
28///
29/// Returns an error if the scheduler is not exclusively owned or stop fails.
30pub async fn SchedulerShutdown(SchedulerForShutdown:Arc<Scheduler>) -> Result<(), String> {
31	debug!("[Shutdown] [Scheduler] Stopping Echo scheduler...");
32
33	// Try to get exclusive ownership for shutdown
34	match Arc::try_unwrap(SchedulerForShutdown) {
35		Ok(mut Scheduler) => {
36			Scheduler.Stop().await;
37			info!("[Shutdown] [Scheduler] Echo scheduler stopped successfully.");
38			Ok(())
39		},
40		Err(_) => Err("Scheduler not exclusively owned".to_string()),
41	}
42}