parent
00708b6696
commit
f0ac145471
|
@ -386,22 +386,21 @@ class Kernel::Signal_receiver
|
||||||
{
|
{
|
||||||
while (1)
|
while (1)
|
||||||
{
|
{
|
||||||
/* check if there are deliverable signal */
|
/* check for deliverable signals and waiting handlers */
|
||||||
if (_deliver.empty()) return;
|
if (_deliver.empty() || _handlers.empty()) { return; }
|
||||||
Signal_context * const c = _deliver.dequeue()->object();
|
|
||||||
|
|
||||||
/* if there is no handler re-enqueue context and exit */
|
/* create a signal data-object */
|
||||||
if (_handlers.empty()) {
|
typedef Genode::Signal_context * Signal_imprint;
|
||||||
_deliver.enqueue(&c->_deliver_fe);
|
auto const context = _deliver.dequeue()->object();
|
||||||
return;
|
auto const imprint =
|
||||||
}
|
reinterpret_cast<Signal_imprint>(context->_imprint);
|
||||||
/* delivery from context to handler */
|
Signal::Data data(imprint, context->_submits);
|
||||||
Signal_handler * const h = _handlers.dequeue()->object();
|
|
||||||
Signal::Data data((Genode::Signal_context *)c->_imprint,
|
/* communicate signal data to handler */
|
||||||
c->_submits);
|
auto const handler = _handlers.dequeue()->object();
|
||||||
h->_receiver = 0;
|
handler->_receiver = 0;
|
||||||
h->_receive_signal(&data, sizeof(data));
|
handler->_receive_signal(&data, sizeof(data));
|
||||||
c->_delivered();
|
context->_delivered();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user