diff options
| author | Mica White <botahamec@gmail.com> | 2024-12-23 15:31:07 -0500 |
|---|---|---|
| committer | Mica White <botahamec@gmail.com> | 2024-12-23 15:33:02 -0500 |
| commit | 30d0f08b6073e9c2e545a3567838a9e1e885fea2 (patch) | |
| tree | 5763e820ed5877b39ef9745e2a9380e665ced099 /src/handle_unwind.rs | |
| parent | fa4fe582f212bec3e4d9fe288aaac8c471b8e987 (diff) | |
Remove scopeguard
The scopeguard crate was being used for its `defer_on_unwind` macro.
The problem was that it runs even if the runtime was already panicking.
There aren't any changes to the macro which could have fixed this.
I instead wrote my own function to check for a specific panicking closure.
Diffstat (limited to 'src/handle_unwind.rs')
| -rw-r--r-- | src/handle_unwind.rs | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/src/handle_unwind.rs b/src/handle_unwind.rs new file mode 100644 index 0000000..d515449 --- /dev/null +++ b/src/handle_unwind.rs @@ -0,0 +1,9 @@ +use std::panic::{catch_unwind, resume_unwind, AssertUnwindSafe}; + +pub fn handle_unwind<R, F: FnOnce() -> R, G: FnOnce()>(try_fn: F, catch: G) -> R { + let try_fn = AssertUnwindSafe(try_fn); + catch_unwind(try_fn).unwrap_or_else(|e| { + catch(); + resume_unwind(e) + }) +} |
