Skip to main content

Mountain/RunTime/Shutdown/
FlushPendingOperations.rs

1//! Drain pending UI requests, replying with a "shutting down" error to each
2//! awaiting caller so they unblock cleanly.
3
4use CommonLibrary::Error::CommonError::CommonError;
5
6use crate::{RunTime::ApplicationRunTime::ApplicationRunTime, dev_log};
7
8impl ApplicationRunTime {
9	pub async fn FlushPendingOperations(&self) {
10		dev_log!("lifecycle", "[ApplicationRunTime] Flushing pending operations...");
11
12		let mut PendingRequestsGuard = self
13			.Environment
14			.ApplicationState
15			.UI
16			.PendingUserInterfaceRequest
17			.lock()
18			.unwrap_or_else(|E| {
19				dev_log!(
20					"lifecycle",
21					"error: [ApplicationRunTime] Failed to lock pending UI requests: {}",
22					E
23				);
24				E.into_inner()
25			});
26
27		for (_RequestIdentifier, Sender) in PendingRequestsGuard.drain() {
28			let _ = Sender.send(Err(CommonError::Unknown {
29				Description:"Application shutting down".to_string(),
30			}));
31		}
32
33		dev_log!("lifecycle", "[ApplicationRunTime] Pending operations flushed");
34	}
35}