bugfix: ensure the PeerServer always calls fail_with before exit

This caused a panic in the PeerSet when remote peers disconnected from us.
This commit is contained in:
Henry de Valence 2019-10-22 14:42:46 -07:00 committed by Deirdre Connolly
parent 32aea0cbf9
commit 4055eb8889
1 changed files with 3 additions and 5 deletions

View File

@ -83,8 +83,7 @@ where
trace!("awaiting client request or peer message"); trace!("awaiting client request or peer message");
match future::select(peer_rx.next(), self.client_rx.next()).await { match future::select(peer_rx.next(), self.client_rx.next()).await {
Either::Left((None, _)) => { Either::Left((None, _)) => {
info!("peer stream closed, shutting down"); self.fail_with(PeerError::ConnectionClosed);
return;
} }
// XXX switch back to hard failure when we parse all message types // XXX switch back to hard failure when we parse all message types
//Either::Left((Some(Err(e)), _)) => self.fail_with(e.into()), //Either::Left((Some(Err(e)), _)) => self.fail_with(e.into()),
@ -93,8 +92,7 @@ where
self.handle_message_as_request(msg).await self.handle_message_as_request(msg).await
} }
Either::Right((None, _)) => { Either::Right((None, _)) => {
info!("client stream closed, shutting down"); self.fail_with(PeerError::DeadPeerClient);
return;
} }
Either::Right((Some(req), _)) => self.handle_client_request(req).await, Either::Right((Some(req), _)) => self.handle_client_request(req).await,
} }
@ -158,7 +156,7 @@ where
/// Marks the peer as having failed with error `e`. /// Marks the peer as having failed with error `e`.
fn fail_with(&mut self, e: PeerError) { fn fail_with(&mut self, e: PeerError) {
trace!(%e, "failing peer service with error"); debug!(%e, "failing peer service with error");
// Update the shared error slot // Update the shared error slot
let mut guard = self let mut guard = self
.error_slot .error_slot