From a372fd6394e748ba766d778627b860e5833637b3 Mon Sep 17 00:00:00 2001
From: Serban Iorga <serban@parity.io>
Date: Fri, 21 Oct 2022 13:43:59 +0300
Subject: [PATCH] Fix parachains_loop::tests::minimal_working_case

---
 bridges/relays/parachains/src/parachains_loop.rs | 10 ++++++----
 1 file changed, 6 insertions(+), 4 deletions(-)

diff --git a/bridges/relays/parachains/src/parachains_loop.rs b/bridges/relays/parachains/src/parachains_loop.rs
index 6648f2efc72..3ef9a7f7a73 100644
--- a/bridges/relays/parachains/src/parachains_loop.rs
+++ b/bridges/relays/parachains/src/parachains_loop.rs
@@ -24,7 +24,7 @@ use bp_polkadot_core::{
 };
 use futures::{
 	future::{FutureExt, Shared},
-	poll, select,
+	poll, select_biased,
 };
 use relay_substrate_client::{BlockNumberOf, Chain, HeaderIdOf};
 use relay_utils::{
@@ -216,10 +216,12 @@ where
 	// regular errors.
 
 	loop {
-		// either wait for new block, or exit signal
-		select! {
-			_ = async_std::task::sleep(min_block_interval).fuse() => {},
+		// Either wait for new block, or exit signal.
+		// Please note that we are prioritizing the exit signal since if both events happen at once
+		// it doesn't make sense to perform one more loop iteration.
+		select_biased! {
 			_ = exit_signal => return Ok(()),
+			_ = async_std::task::sleep(min_block_interval).fuse() => {},
 		}
 
 		// if source client is not yet synced, we'll need to sleep. Otherwise we risk submitting too
-- 
GitLab