diff options
author | Nayeem Rahman <nayeemrmn99@gmail.com> | 2024-05-29 01:26:43 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-05-29 01:26:43 +0100 |
commit | 14a74600de6f1c206ffe4750f6cb6da59657db8e (patch) | |
tree | ce593041af972fd31f83fa6b7b50458bc9f689dc /cli/util | |
parent | 2024c974b613f94f31559a1b32e2d747c2083e91 (diff) |
perf(lsp): lock out requests until init is complete (#23998)
Diffstat (limited to 'cli/util')
-rw-r--r-- | cli/util/sync.rs | 18 |
1 files changed, 18 insertions, 0 deletions
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<Output = ()> + '_ { + self.0.cancelled() + } +} + #[cfg(test)] mod test { use deno_core::futures; |