forked from Bananymous/banan-os
Kernel: Add API to block on semaphore until unblock or EINTR
This commit is contained in:
parent
534969df32
commit
1ac831d4b1
|
@ -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; }
|
||||
|
|
|
@ -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())
|
||||
|
|
Loading…
Reference in New Issue