Merge pull request #471 from b-m-f/split-network-loops
Split network and swarm discovery loop, break each when not ready
This commit is contained in:
commit
c695aa3c92
@ -106,10 +106,8 @@ fn network_service<E: EthSpec>(
|
||||
log: slog::Logger,
|
||||
) -> impl futures::Future<Item = (), Error = eth2_libp2p::error::Error> {
|
||||
futures::future::poll_fn(move || -> Result<_, eth2_libp2p::error::Error> {
|
||||
// only end the loop once both major polls are not ready.
|
||||
let mut not_ready_count = 0;
|
||||
while not_ready_count < 2 {
|
||||
not_ready_count = 0;
|
||||
// if the network channel is not ready, try the swarm
|
||||
loop {
|
||||
// poll the network channel
|
||||
match network_recv.poll() {
|
||||
Ok(Async::Ready(Some(message))) => match message {
|
||||
@ -124,7 +122,7 @@ fn network_service<E: EthSpec>(
|
||||
libp2p_service.lock().swarm.publish(topics, *message);
|
||||
}
|
||||
},
|
||||
Ok(Async::NotReady) => not_ready_count += 1,
|
||||
Ok(Async::NotReady) => break,
|
||||
Ok(Async::Ready(None)) => {
|
||||
return Err(eth2_libp2p::error::Error::from("Network channel closed"));
|
||||
}
|
||||
@ -132,7 +130,9 @@ fn network_service<E: EthSpec>(
|
||||
return Err(eth2_libp2p::error::Error::from("Network channel error"));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
loop {
|
||||
// poll the swarm
|
||||
match libp2p_service.lock().poll() {
|
||||
Ok(Async::Ready(Some(event))) => match event {
|
||||
@ -165,8 +165,8 @@ fn network_service<E: EthSpec>(
|
||||
}
|
||||
},
|
||||
Ok(Async::Ready(None)) => unreachable!("Stream never ends"),
|
||||
Ok(Async::NotReady) => not_ready_count += 1,
|
||||
Err(_) => not_ready_count += 1,
|
||||
Ok(Async::NotReady) => break,
|
||||
Err(_) => break,
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user