Kernel: Allow pipe to write partial data
This allows potential blocking
This commit is contained in:
parent
63b3d9875d
commit
201d752850
|
@ -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())
|
||||||
|
|
Loading…
Reference in New Issue