base-hw: no pointer arguments in signaling

Besides reducing the use of pointers in base-hw, this prepares for the in-place
translation of the signaling module to Ada in the context of the Spunky
project.

Ref #3308
This commit is contained in:
Martin Stein 2019-05-20 17:36:33 +02:00 committed by Christian Helmuth
parent 5e460394d2
commit 9eb20c2be7
4 changed files with 34 additions and 34 deletions

View File

@ -25,7 +25,7 @@ using namespace Kernel;
void Signal_handler::cancel_waiting() void Signal_handler::cancel_waiting()
{ {
if (_receiver) { if (_receiver) {
_receiver->_handler_cancelled(this); _receiver->_handler_cancelled(*this);
_receiver = 0; _receiver = 0;
} }
} }
@ -61,7 +61,7 @@ Signal_context_killer::~Signal_context_killer() { cancel_waiting(); }
void Signal_context::_deliverable() 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 */ /* check if in a kill operation or already killed */
if (_killed) { if (_killed) {
@ -113,7 +113,7 @@ int Signal_context::kill(Signal_context_killer * const k)
return 0; return 0;
} }
/* wait for delivery acknowledgement */ /* wait for delivery acknowledgement */
_killer = k; _killer = &k;
_killed = 1; _killed = 1;
_killer->_context = this; _killer->_context = this;
_killer->_thread.signal_context_kill_pending(); _killer->_thread.signal_context_kill_pending();
@ -124,7 +124,7 @@ int Signal_context::kill(Signal_context_killer * const k)
Signal_context::~Signal_context() Signal_context::~Signal_context()
{ {
if (_killer) { _killer->_thread.signal_context_kill_failed(); } 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), : _receiver(r),
_imprint(imprint) _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 ** ** Signal_receiver **
*********************/ *********************/
void Signal_receiver::_add_deliverable(Signal_context * const c) void Signal_receiver::_add_deliverable(Signal_context &c)
{ {
if (!c->_deliver_fe.enqueued()) { if (!c._deliver_fe.enqueued()) {
_deliver.enqueue(c->_deliver_fe); _deliver.enqueue(c._deliver_fe);
} }
_listen(); _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); _contexts.remove(c._contexts_fe);
if (!c->_deliver_fe.enqueued()) { return; } if (!c._deliver_fe.enqueued()) { return; }
_deliver.remove(c->_deliver_fe); _deliver.remove(c._deliver_fe);
} }
void Signal_receiver::_handler_cancelled(Signal_handler * const h) { void Signal_receiver::_handler_cancelled(Signal_handler &h) {
_handlers.remove(h->_handlers_fe); } _handlers.remove(h._handlers_fe); }
void Signal_receiver::_add_context(Signal_context * const c) { void Signal_receiver::_add_context(Signal_context &c) {
_contexts.enqueue(c->_contexts_fe); } _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; } if (h._receiver) { return -1; }
_handlers.enqueue(h->_handlers_fe); _handlers.enqueue(h._handlers_fe);
h->_receiver = this; h._receiver = this;
h->_thread.signal_wait_for_signal(this); h._thread.signal_wait_for_signal(*this);
_listen(); _listen();
return 0; return 0;
} }

View File

@ -184,7 +184,7 @@ class Kernel::Signal_context
* \retval 0 succeeded * \retval 0 succeeded
* \retval -1 failed * \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 * 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 * 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 * Deliver as much submits as possible
@ -245,17 +245,17 @@ class Kernel::Signal_receiver
* *
* \param c destructed context * \param c destructed context
*/ */
void _context_destructed(Signal_context * const c); void _context_destructed(Signal_context &c);
/** /**
* Notice that handler 'h' has cancelled waiting * 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 * Assign context 'c' to the receiver
*/ */
void _add_context(Signal_context * const c); void _add_context(Signal_context &c);
public: public:
@ -267,7 +267,7 @@ class Kernel::Signal_receiver
* \retval 0 succeeded * \retval 0 succeeded
* \retval -1 failed * \retval -1 failed
*/ */
int add_handler(Signal_handler * const h); int add_handler(Signal_handler &h);
/** /**
* Syscall to create a signal receiver * Syscall to create a signal receiver

View File

@ -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); _become_inactive(AWAITS_SIGNAL);
_signal_receiver = receiver; _signal_receiver = &receiver;
} }
@ -523,7 +523,7 @@ void Thread::_call_await_signal()
return; return;
} }
/* register handler at the receiver */ /* 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"); Genode::raw("failed to register handler at signal receiver");
user_arg_0(-1); user_arg_0(-1);
return; return;
@ -544,7 +544,7 @@ void Thread::_call_pending_signal()
} }
/* register handler at the receiver */ /* register handler at the receiver */
if (r->add_handler(&_signal_handler)) { if (r->add_handler(_signal_handler)) {
user_arg_0(-1); user_arg_0(-1);
return; return;
} }
@ -623,7 +623,7 @@ void Thread::_call_kill_signal_context()
} }
/* 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"); Genode::raw("failed to kill signal context");
user_arg_0(-1); user_arg_0(-1);
return; return;

View File

@ -378,7 +378,7 @@ class Kernel::Thread : private Kernel::Object, public Cpu_job, private Timeout
void signal_context_kill_pending(); void signal_context_kill_pending();
void signal_context_kill_failed(); void signal_context_kill_failed();
void signal_context_kill_done(); 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); void signal_receive_signal(void * const base, size_t const size);