From 8c29036fbf8bd7843fc6c06ed6249b0069bb91dc Mon Sep 17 00:00:00 2001 From: Bananymous Date: Wed, 30 Jul 2025 23:13:20 +0300 Subject: [PATCH] Kernel: Fix EAGAIN on hungup pipe --- kernel/kernel/OpenFileDescriptorSet.cpp | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/kernel/kernel/OpenFileDescriptorSet.cpp b/kernel/kernel/OpenFileDescriptorSet.cpp index 77005e85..3eaa15f8 100644 --- a/kernel/kernel/OpenFileDescriptorSet.cpp +++ b/kernel/kernel/OpenFileDescriptorSet.cpp @@ -429,6 +429,8 @@ namespace Kernel size_t nread; { LockGuard _(inode->m_mutex); + if (!inode->can_read() && inode->has_hungup()) + return 0; if (is_nonblock && !inode->can_read()) return BAN::Error::from_errno(EAGAIN); nread = TRY(inode->read(offset, buffer)); @@ -464,6 +466,11 @@ namespace Kernel size_t nwrite; { LockGuard _(inode->m_mutex); + if (inode->has_error()) + { + Thread::current().add_signal(SIGPIPE); + return BAN::Error::from_errno(EPIPE); + } if (is_nonblock && !inode->can_write()) return BAN::Error::from_errno(EAGAIN); nwrite = TRY(inode->write(offset, buffer));