From 201d7528509f4200a05bdfd7e7b456cb10f7d76a Mon Sep 17 00:00:00 2001 From: Bananymous Date: Fri, 18 Apr 2025 23:43:46 +0300 Subject: [PATCH] Kernel: Allow pipe to write partial data This allows potential blocking --- kernel/kernel/FS/Pipe.cpp | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/kernel/kernel/FS/Pipe.cpp b/kernel/kernel/FS/Pipe.cpp index 52de5b40..f8d0b9bb 100644 --- a/kernel/kernel/FS/Pipe.cpp +++ b/kernel/kernel/FS/Pipe.cpp @@ -78,16 +78,13 @@ namespace Kernel { LockGuard _(m_mutex); - if (buffer.size() > m_buffer.size()) - buffer = buffer.slice(0, m_buffer.size()); - - while (m_buffer.size() - m_buffer_size < buffer.size()) + while (m_buffer_size >= m_buffer.size()) { LockFreeGuard lock_free(m_mutex); TRY(Thread::current().block_or_eintr_or_timeout_ms(m_thread_blocker, 100, false)); } - const size_t to_copy = buffer.size(); + const size_t to_copy = BAN::Math::min(buffer.size(), m_buffer.size() - m_buffer_size); const size_t buffer_head = (m_buffer_tail + m_buffer_size) % m_buffer.size(); if (buffer_head + to_copy <= m_buffer.size())