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);
|
void handle_signal(int signal = 0);
|
||||||
bool add_signal(int signal);
|
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_rsp(uintptr_t& rsp) { m_return_rsp = &rsp; }
|
||||||
void set_return_rip(uintptr_t& rip) { m_return_rip = &rip; }
|
void set_return_rip(uintptr_t& rip) { m_return_rip = &rip; }
|
||||||
uintptr_t return_rsp() { ASSERT(m_return_rsp); return *m_return_rsp; }
|
uintptr_t return_rsp() { ASSERT(m_return_rsp); return *m_return_rsp; }
|
||||||
|
|
|
@ -330,6 +330,14 @@ namespace Kernel
|
||||||
return false;
|
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
|
void Thread::validate_stack() const
|
||||||
{
|
{
|
||||||
if (stack_base() <= m_rsp && m_rsp <= stack_base() + stack_size())
|
if (stack_base() <= m_rsp && m_rsp <= stack_base() + stack_size())
|
||||||
|
|
Loading…
Reference in New Issue