summaryrefslogtreecommitdiff
path: root/cli/util
diff options
context:
space:
mode:
authorNayeem Rahman <nayeemrmn99@gmail.com>2024-05-29 01:26:43 +0100
committerGitHub <noreply@github.com>2024-05-29 01:26:43 +0100
commit14a74600de6f1c206ffe4750f6cb6da59657db8e (patch)
treece593041af972fd31f83fa6b7b50458bc9f689dc /cli/util
parent2024c974b613f94f31559a1b32e2d747c2083e91 (diff)
perf(lsp): lock out requests until init is complete (#23998)
Diffstat (limited to 'cli/util')
-rw-r--r--cli/util/sync.rs18
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;