From 14a74600de6f1c206ffe4750f6cb6da59657db8e Mon Sep 17 00:00:00 2001 From: Nayeem Rahman Date: Wed, 29 May 2024 01:26:43 +0100 Subject: perf(lsp): lock out requests until init is complete (#23998) --- cli/util/sync.rs | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) (limited to 'cli/util') diff --git a/cli/util/sync.rs b/cli/util/sync.rs index dddb5991c..3986c883e 100644 --- a/cli/util/sync.rs +++ b/cli/util/sync.rs @@ -8,6 +8,7 @@ use std::sync::Arc; use deno_core::futures::task::AtomicWaker; use deno_core::futures::Future; use deno_core::parking_lot::Mutex; +use tokio_util::sync::CancellationToken; /// Simplifies the use of an atomic boolean as a flag. #[derive(Debug, Default)] @@ -160,6 +161,23 @@ impl<'a> Future for TaskQueuePermitAcquireFuture<'a> { } } +#[derive(Debug, Default, Clone)] +pub struct AsyncFlag(CancellationToken); + +impl AsyncFlag { + pub fn raise(&self) { + self.0.cancel(); + } + + pub fn is_raised(&self) -> bool { + self.0.is_cancelled() + } + + pub fn wait_raised(&self) -> impl std::future::Future + '_ { + self.0.cancelled() + } +} + #[cfg(test)] mod test { use deno_core::futures; -- cgit v1.2.3