mirror of
https://github.com/genodelabs/genode.git
synced 2025-06-18 07:08:18 +00:00
libc: dispatch pending signals at selective points
This commit is contained in:
@ -172,7 +172,7 @@ void Entrypoint::_process_incoming_signals()
|
||||
}
|
||||
|
||||
|
||||
void Entrypoint::wait_and_dispatch_one_io_signal()
|
||||
bool Entrypoint::_wait_and_dispatch_one_io_signal(bool const dont_block)
|
||||
{
|
||||
for (;;) {
|
||||
|
||||
@ -198,6 +198,11 @@ void Entrypoint::wait_and_dispatch_one_io_signal()
|
||||
|
||||
} catch (Signal_receiver::Signal_not_pending) {
|
||||
_signal_pending_lock.unlock();
|
||||
if (dont_block) {
|
||||
/* indicate that we leave wait_and_dispatch_one_io_signal */
|
||||
cmpxchg(&_signal_recipient, ENTRYPOINT, NONE);
|
||||
return false;
|
||||
}
|
||||
_sig_rec->block_for_signal();
|
||||
}
|
||||
}
|
||||
@ -212,6 +217,8 @@ void Entrypoint::wait_and_dispatch_one_io_signal()
|
||||
&Entrypoint::_handle_deferred_signals);
|
||||
Signal_transmitter(*_deferred_signal_handler).submit();
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user