diff --git a/repos/base-hw/src/core/kernel/signal_receiver.cc b/repos/base-hw/src/core/kernel/signal_receiver.cc index 344588ff8..97149c1ea 100644 --- a/repos/base-hw/src/core/kernel/signal_receiver.cc +++ b/repos/base-hw/src/core/kernel/signal_receiver.cc @@ -25,7 +25,7 @@ using namespace Kernel; void Signal_handler::cancel_waiting() { if (_receiver) { - _receiver->_handler_cancelled(this); + _receiver->_handler_cancelled(*this); _receiver = 0; } } @@ -61,7 +61,7 @@ Signal_context_killer::~Signal_context_killer() { cancel_waiting(); } void Signal_context::_deliverable() { - if (_submits) { _receiver._add_deliverable(this); } + if (_submits) { _receiver._add_deliverable(*this); } } @@ -100,7 +100,7 @@ void Signal_context::ack() } -int Signal_context::kill(Signal_context_killer * const k) +int Signal_context::kill(Signal_context_killer &k) { /* check if in a kill operation or already killed */ if (_killed) { @@ -113,7 +113,7 @@ int Signal_context::kill(Signal_context_killer * const k) return 0; } /* wait for delivery acknowledgement */ - _killer = k; + _killer = &k; _killed = 1; _killer->_context = this; _killer->_thread.signal_context_kill_pending(); @@ -124,7 +124,7 @@ int Signal_context::kill(Signal_context_killer * const k) Signal_context::~Signal_context() { if (_killer) { _killer->_thread.signal_context_kill_failed(); } - _receiver._context_destructed(this); + _receiver._context_destructed(*this); } @@ -132,7 +132,7 @@ Signal_context::Signal_context(Signal_receiver & r, addr_t const imprint) : _receiver(r), _imprint(imprint) { - r._add_context(this); + r._add_context(*this); } @@ -140,10 +140,10 @@ Signal_context::Signal_context(Signal_receiver & r, addr_t const imprint) ** Signal_receiver ** *********************/ -void Signal_receiver::_add_deliverable(Signal_context * const c) +void Signal_receiver::_add_deliverable(Signal_context &c) { - if (!c->_deliver_fe.enqueued()) { - _deliver.enqueue(c->_deliver_fe); + if (!c._deliver_fe.enqueued()) { + _deliver.enqueue(c._deliver_fe); } _listen(); } @@ -178,28 +178,28 @@ void Signal_receiver::_listen() } -void Signal_receiver::_context_destructed(Signal_context * const c) +void Signal_receiver::_context_destructed(Signal_context &c) { - _contexts.remove(c->_contexts_fe); - if (!c->_deliver_fe.enqueued()) { return; } - _deliver.remove(c->_deliver_fe); + _contexts.remove(c._contexts_fe); + if (!c._deliver_fe.enqueued()) { return; } + _deliver.remove(c._deliver_fe); } -void Signal_receiver::_handler_cancelled(Signal_handler * const h) { - _handlers.remove(h->_handlers_fe); } +void Signal_receiver::_handler_cancelled(Signal_handler &h) { + _handlers.remove(h._handlers_fe); } -void Signal_receiver::_add_context(Signal_context * const c) { - _contexts.enqueue(c->_contexts_fe); } +void Signal_receiver::_add_context(Signal_context &c) { + _contexts.enqueue(c._contexts_fe); } -int Signal_receiver::add_handler(Signal_handler * const h) +int Signal_receiver::add_handler(Signal_handler &h) { - if (h->_receiver) { return -1; } - _handlers.enqueue(h->_handlers_fe); - h->_receiver = this; - h->_thread.signal_wait_for_signal(this); + if (h._receiver) { return -1; } + _handlers.enqueue(h._handlers_fe); + h._receiver = this; + h._thread.signal_wait_for_signal(*this); _listen(); return 0; } diff --git a/repos/base-hw/src/core/kernel/signal_receiver.h b/repos/base-hw/src/core/kernel/signal_receiver.h index 94804b350..6a3ef7927 100644 --- a/repos/base-hw/src/core/kernel/signal_receiver.h +++ b/repos/base-hw/src/core/kernel/signal_receiver.h @@ -184,7 +184,7 @@ class Kernel::Signal_context * \retval 0 succeeded * \retval -1 failed */ - int kill(Signal_context_killer * const k); + int kill(Signal_context_killer &k); /** * Create a signal context and assign it to a signal receiver @@ -233,7 +233,7 @@ class Kernel::Signal_receiver /** * Recognize that context 'c' has submits to deliver */ - void _add_deliverable(Signal_context * const c); + void _add_deliverable(Signal_context &c); /** * Deliver as much submits as possible @@ -245,17 +245,17 @@ class Kernel::Signal_receiver * * \param c destructed context */ - void _context_destructed(Signal_context * const c); + void _context_destructed(Signal_context &c); /** * Notice that handler 'h' has cancelled waiting */ - void _handler_cancelled(Signal_handler * const h); + void _handler_cancelled(Signal_handler &h); /** * Assign context 'c' to the receiver */ - void _add_context(Signal_context * const c); + void _add_context(Signal_context &c); public: @@ -267,7 +267,7 @@ class Kernel::Signal_receiver * \retval 0 succeeded * \retval -1 failed */ - int add_handler(Signal_handler * const h); + int add_handler(Signal_handler &h); /** * Syscall to create a signal receiver diff --git a/repos/base-hw/src/core/kernel/thread.cc b/repos/base-hw/src/core/kernel/thread.cc index b9fe33949..eaa56e78a 100644 --- a/repos/base-hw/src/core/kernel/thread.cc +++ b/repos/base-hw/src/core/kernel/thread.cc @@ -165,10 +165,10 @@ void Thread::signal_context_kill_failed() } -void Thread::signal_wait_for_signal(Signal_receiver * const receiver) +void Thread::signal_wait_for_signal(Signal_receiver &receiver) { _become_inactive(AWAITS_SIGNAL); - _signal_receiver = receiver; + _signal_receiver = &receiver; } @@ -523,7 +523,7 @@ void Thread::_call_await_signal() return; } /* register handler at the receiver */ - if (r->add_handler(&_signal_handler)) { + if (r->add_handler(_signal_handler)) { Genode::raw("failed to register handler at signal receiver"); user_arg_0(-1); return; @@ -544,7 +544,7 @@ void Thread::_call_pending_signal() } /* register handler at the receiver */ - if (r->add_handler(&_signal_handler)) { + if (r->add_handler(_signal_handler)) { user_arg_0(-1); return; } @@ -623,7 +623,7 @@ void Thread::_call_kill_signal_context() } /* kill signal context */ - if (c->kill(&_signal_context_killer)) { + if (c->kill(_signal_context_killer)) { Genode::raw("failed to kill signal context"); user_arg_0(-1); return; diff --git a/repos/base-hw/src/core/kernel/thread.h b/repos/base-hw/src/core/kernel/thread.h index 56718156a..e3a1d33e5 100644 --- a/repos/base-hw/src/core/kernel/thread.h +++ b/repos/base-hw/src/core/kernel/thread.h @@ -378,7 +378,7 @@ class Kernel::Thread : private Kernel::Object, public Cpu_job, private Timeout void signal_context_kill_pending(); void signal_context_kill_failed(); void signal_context_kill_done(); - void signal_wait_for_signal(Signal_receiver * const receiver); + void signal_wait_for_signal(Signal_receiver &receiver); void signal_receive_signal(void * const base, size_t const size);