Zero-length reads and writes on a named pipe should succeed even if the peer is closed

This commit is contained in:
vvsv 2025-12-05 15:40:52 +00:00 committed by Tate, Hongliang Tian
parent 74ed6c721d
commit 3b44a638f4
1 changed files with 12 additions and 0 deletions

View File

@ -88,6 +88,12 @@ impl InodeIo for NamedPipeHandle {
writer: &mut VmWriter,
status_flags: StatusFlags,
) -> Result<usize> {
if !writer.has_avail() {
// Even the peer endpoint has been closed, reading an empty buffer is
// still fine.
return Ok(0);
}
if status_flags.contains(StatusFlags::O_NONBLOCK) {
self.try_read(writer)
} else {
@ -101,6 +107,12 @@ impl InodeIo for NamedPipeHandle {
reader: &mut VmReader,
status_flags: StatusFlags,
) -> Result<usize> {
if !reader.has_remain() {
// Even the peer endpoint has been closed, writing an empty buffer is
// still fine.
return Ok(0);
}
if status_flags.contains(StatusFlags::O_NONBLOCK) {
self.try_write(reader)
} else {