From 8c597ff52193404d96dedbbb557b99d078a9d5d6 Mon Sep 17 00:00:00 2001 From: Matthias Seitz Date: Wed, 31 Jan 2024 01:14:33 +0100 Subject: [PATCH] fix: handle IPC unreadable socket --- crates/transport-ipc/src/lib.rs | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/crates/transport-ipc/src/lib.rs b/crates/transport-ipc/src/lib.rs index 1f1b24ab8c3e..b95fc6767e53 100644 --- a/crates/transport-ipc/src/lib.rs +++ b/crates/transport-ipc/src/lib.rs @@ -21,7 +21,7 @@ extern crate tracing; use bytes::{Buf, BytesMut}; use futures::{ready, AsyncRead, AsyncWriteExt, StreamExt}; use interprocess::local_socket::{tokio::LocalSocketStream, ToLocalSocketName}; -use std::task::Poll::Ready; +use std::task::{Poll, Poll::Ready}; use tokio::select; use tokio_util::compat::FuturesAsyncReadCompatExt; @@ -196,6 +196,14 @@ where Ok(data_len) => { debug!(%data_len, "Read data from IPC socket"); + if data_len == 0 { + // stream is no longer readable and we're also unable to decode any more + // data. This happens if the IPC socket is closed by the other end. + // so we can return `None` here. + debug!("IPC socket EOF, stream is closed"); + return Ready(None); + } + // can try decoding again *this.drained = false; }