fix: handle Multiplex P2PStream.poll_ready errors (#7988)

This commit is contained in:
Federico Gimenez
2024-04-30 12:02:51 +02:00
committed by GitHub
parent d281699c2a
commit 5d795b9342

View File

@ -19,6 +19,7 @@ use std::{
use crate::{ use crate::{
capability::{Capability, SharedCapabilities, SharedCapability, UnsupportedCapabilityError}, capability::{Capability, SharedCapabilities, SharedCapability, UnsupportedCapabilityError},
errors::{EthStreamError, P2PStreamError}, errors::{EthStreamError, P2PStreamError},
p2pstream::DisconnectP2P,
CanDisconnect, DisconnectReason, EthStream, P2PStream, Status, UnauthedEthStream, CanDisconnect, DisconnectReason, EthStream, P2PStream, Status, UnauthedEthStream,
}; };
use bytes::{Bytes, BytesMut}; use bytes::{Bytes, BytesMut};
@ -465,7 +466,7 @@ where
let mut conn_ready = true; let mut conn_ready = true;
loop { loop {
match this.inner.conn.poll_ready_unpin(cx) { match this.inner.conn.poll_ready_unpin(cx) {
Poll::Ready(_) => { Poll::Ready(Ok(())) => {
if let Some(msg) = this.inner.out_buffer.pop_front() { if let Some(msg) = this.inner.out_buffer.pop_front() {
if let Err(err) = this.inner.conn.start_send_unpin(msg) { if let Err(err) = this.inner.conn.start_send_unpin(msg) {
return Poll::Ready(Some(Err(err.into()))) return Poll::Ready(Some(Err(err.into())))
@ -474,6 +475,14 @@ where
break break
} }
} }
Poll::Ready(Err(err)) => {
if let Err(disconnect_err) =
this.inner.conn.start_disconnect(DisconnectReason::DisconnectRequested)
{
return Poll::Ready(Some(Err(disconnect_err.into())));
}
return Poll::Ready(Some(Err(err.into())));
}
Poll::Pending => { Poll::Pending => {
conn_ready = false; conn_ready = false;
break break