From d8ca2f37df6bad8601a9898e77aada0017e63f89 Mon Sep 17 00:00:00 2001 From: Pierre Krieger <pierre.krieger1708@gmail.com> Date: Mon, 25 Nov 2019 17:48:25 +0100 Subject: [PATCH] Make spawn_essential_task more strict (#4198) --- substrate/client/service/src/lib.rs | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/substrate/client/service/src/lib.rs b/substrate/client/service/src/lib.rs index 2bc56647a60..dd982e5a2ea 100644 --- a/substrate/client/service/src/lib.rs +++ b/substrate/client/service/src/lib.rs @@ -240,10 +240,13 @@ where fn spawn_essential_task(&self, task: impl Future<Item = (), Error = ()> + Send + 'static) { let essential_failed = self.essential_failed.clone(); - let essential_task = task.map_err(move |_| { - error!("Essential task failed. Shutting down service."); - essential_failed.store(true, Ordering::Relaxed); - }); + let essential_task = std::panic::AssertUnwindSafe(task) + .catch_unwind() + .then(move |_| { + error!("Essential task failed. Shutting down service."); + essential_failed.store(true, Ordering::Relaxed); + Ok(()) + }); let task = essential_task.select(self.on_exit()).then(|_| Ok(())); let _ = self.to_spawn_tx.unbounded_send(Box::new(task)); -- GitLab