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