Skip to content
Snippets Groups Projects
Commit 38eed5f0 authored by Bastian Köcher's avatar Bastian Köcher Committed by GitHub
Browse files

Do not panic while panicking (#7167)


* Do not panic while panicking

* Update primitives/runtime/src/lib.rs

Co-authored-by: default avatarDavid <dvdplm@gmail.com>

* Move function to `sp-std`

Co-authored-by: default avatarDavid <dvdplm@gmail.com>
parent ea21afa4
No related merge requests found
......@@ -795,7 +795,10 @@ impl SignatureBatching {
impl Drop for SignatureBatching {
fn drop(&mut self) {
// Sanity check. If user forgets to actually call `verify()`.
if !self.0 {
//
// We should not panic if the current thread is already panicking,
// because Rust otherwise aborts the process.
if !self.0 && !sp_std::thread::panicking() {
panic!("Signature verification has not been called before `SignatureBatching::drop`")
}
}
......@@ -885,4 +888,18 @@ mod tests {
);
});
}
#[test]
#[should_panic(expected = "Hey, I'm an error")]
fn batching_does_not_panic_while_thread_is_already_panicking() {
let mut ext = sp_state_machine::BasicExternalities::default();
ext.register_extension(
sp_core::traits::TaskExecutorExt::new(sp_core::testing::TaskExecutor::new()),
);
ext.execute_with(|| {
let _batching = SignatureBatching::start();
panic!("Hey, I'm an error");
});
}
}
......@@ -44,3 +44,7 @@ pub mod collections {
pub use std::collections::btree_set;
pub use std::collections::vec_deque;
}
pub mod thread {
pub use std::thread::panicking;
}
......@@ -53,3 +53,12 @@ pub mod borrow {
pub use core::borrow::*;
pub use alloc::borrow::*;
}
pub mod thread {
/// Returns if the current thread is panicking.
///
/// In wasm this always returns `false`, as we abort on any panic.
pub fn panicking() -> bool {
false
}
}
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment