forked from Bananymous/banan-os
Kernel: Semaphores and Threads can now be blocked with timeout
This commit is contained in:
@@ -64,9 +64,8 @@ namespace Kernel
|
||||
{
|
||||
while (!s_instance->m_should_sync)
|
||||
{
|
||||
s_instance->m_device_lock.unlock();
|
||||
s_instance->m_sync_semaphore.block();
|
||||
s_instance->m_device_lock.lock();
|
||||
LockFreeGuard _(s_instance->m_device_lock);
|
||||
s_instance->m_sync_semaphore.block_indefinite();
|
||||
}
|
||||
|
||||
for (auto& device : s_instance->m_devices)
|
||||
@@ -105,7 +104,7 @@ namespace Kernel
|
||||
m_sync_semaphore.unblock();
|
||||
}
|
||||
if (should_block)
|
||||
m_sync_done.block();
|
||||
m_sync_done.block_indefinite();
|
||||
}
|
||||
|
||||
void DevFileSystem::add_device(BAN::RefPtr<Device> device)
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
#include <kernel/FS/Pipe.h>
|
||||
#include <kernel/LockGuard.h>
|
||||
#include <kernel/Thread.h>
|
||||
#include <kernel/Timer/Timer.h>
|
||||
|
||||
namespace Kernel
|
||||
@@ -46,9 +47,8 @@ namespace Kernel
|
||||
{
|
||||
if (m_writing_count == 0)
|
||||
return 0;
|
||||
m_lock.unlock();
|
||||
m_semaphore.block();
|
||||
m_lock.lock();
|
||||
LockFreeGuard lock_free(m_lock);
|
||||
TRY(Thread::current().block_or_eintr_indefinite(m_semaphore));
|
||||
}
|
||||
|
||||
size_t to_copy = BAN::Math::min<size_t>(buffer.size(), m_buffer.size());
|
||||
|
||||
Reference in New Issue
Block a user