From e2ff77c9ffeb42b442e720ccb6658aaab3448f59 Mon Sep 17 00:00:00 2001
From: Piotr Figiela <77412592+Draggu@users.noreply.github.com>
Date: Mon, 2 Sep 2024 11:09:59 +0200
Subject: [PATCH] LS: Unrecognized LS requests to be cancelled on salsa
 failures (#6319)

---
 crates/cairo-lang-language-server/src/lib.rs | 11 ++++++++++-
 1 file changed, 10 insertions(+), 1 deletion(-)

diff --git a/crates/cairo-lang-language-server/src/lib.rs b/crates/cairo-lang-language-server/src/lib.rs
index 4475fd80870..179864d4ec8 100644
--- a/crates/cairo-lang-language-server/src/lib.rs
+++ b/crates/cairo-lang-language-server/src/lib.rs
@@ -320,7 +320,16 @@ impl Backend {
     {
         spawn_blocking(move || {
             catch_unwind(AssertUnwindSafe(f)).map_err(|err| {
-                if err.is::<Cancelled>() {
+                // Salsa is broken and sometimes when cancelled throws regular assert instead of
+                // [`Cancelled`]. Catch this case too.
+                if err.is::<Cancelled>()
+                    || err.downcast_ref::<&str>().is_some_and(|msg| {
+                        msg.contains(
+                            "assertion failed: old_memo.revisions.changed_at <= \
+                             revisions.changed_at",
+                        )
+                    })
+                {
                     debug!("LSP worker thread was cancelled");
                     LSPError::request_cancelled()
                 } else {