Kernel: Add API to block on semaphore until unblock or EINTR

This commit is contained in:
Bananymous 2023-12-06 16:13:07 +02:00
parent 534969df32
commit 1ac831d4b1
2 changed files with 11 additions and 0 deletions

View File

@ -47,6 +47,9 @@ namespace Kernel
void handle_signal(int signal = 0);
bool add_signal(int signal);
// blocks semaphore and returns either on unblock, eintr or spuriously
[[nodiscard]] bool block_or_eintr(Semaphore&);
void set_return_rsp(uintptr_t& rsp) { m_return_rsp = &rsp; }
void set_return_rip(uintptr_t& rip) { m_return_rip = &rip; }
uintptr_t return_rsp() { ASSERT(m_return_rsp); return *m_return_rsp; }

View File

@ -330,6 +330,14 @@ namespace Kernel
return false;
}
bool Thread::block_or_eintr(Semaphore& semaphore)
{
if (is_interrupted_by_signal())
return true;
semaphore.block();
return is_interrupted_by_signal();
}
void Thread::validate_stack() const
{
if (stack_base() <= m_rsp && m_rsp <= stack_base() + stack_size())