Kernel: Allow pipe to write partial data

This allows potential blocking
This commit is contained in:
Bananymous 2025-04-18 23:43:46 +03:00
parent 63b3d9875d
commit 201d752850
1 changed files with 2 additions and 5 deletions

View File

@ -78,16 +78,13 @@ namespace Kernel
{ {
LockGuard _(m_mutex); LockGuard _(m_mutex);
if (buffer.size() > m_buffer.size()) while (m_buffer_size >= m_buffer.size())
buffer = buffer.slice(0, m_buffer.size());
while (m_buffer.size() - m_buffer_size < buffer.size())
{ {
LockFreeGuard lock_free(m_mutex); LockFreeGuard lock_free(m_mutex);
TRY(Thread::current().block_or_eintr_or_timeout_ms(m_thread_blocker, 100, false)); 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(); const size_t buffer_head = (m_buffer_tail + m_buffer_size) % m_buffer.size();
if (buffer_head + to_copy <= m_buffer.size()) if (buffer_head + to_copy <= m_buffer.size())