diff options
Diffstat (limited to 'crates/ra_db/src/lib.rs')
-rw-r--r-- | crates/ra_db/src/lib.rs | 5 |
1 files changed, 2 insertions, 3 deletions
diff --git a/crates/ra_db/src/lib.rs b/crates/ra_db/src/lib.rs index 00d2d5ae9..20e712afe 100644 --- a/crates/ra_db/src/lib.rs +++ b/crates/ra_db/src/lib.rs | |||
@@ -20,7 +20,7 @@ pub use crate::{ | |||
20 | loc2id::LocationIntener, | 20 | loc2id::LocationIntener, |
21 | }; | 21 | }; |
22 | 22 | ||
23 | pub trait BaseDatabase: salsa::Database { | 23 | pub trait BaseDatabase: salsa::Database + panic::RefUnwindSafe { |
24 | fn check_canceled(&self) -> Cancelable<()> { | 24 | fn check_canceled(&self) -> Cancelable<()> { |
25 | self.salsa_runtime() | 25 | self.salsa_runtime() |
26 | .if_current_revision_is_canceled(Canceled::throw); | 26 | .if_current_revision_is_canceled(Canceled::throw); |
@@ -31,8 +31,7 @@ pub trait BaseDatabase: salsa::Database { | |||
31 | &self, | 31 | &self, |
32 | f: F, | 32 | f: F, |
33 | ) -> Result<T, Canceled> { | 33 | ) -> Result<T, Canceled> { |
34 | let me = panic::AssertUnwindSafe(self); | 34 | panic::catch_unwind(|| f(self)).map_err(|err| match err.downcast::<Canceled>() { |
35 | panic::catch_unwind(|| f(me.0)).map_err(|err| match err.downcast::<Canceled>() { | ||
36 | Ok(canceled) => *canceled, | 35 | Ok(canceled) => *canceled, |
37 | Err(payload) => panic::resume_unwind(payload), | 36 | Err(payload) => panic::resume_unwind(payload), |
38 | }) | 37 | }) |