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()
{
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;
}

View File

@ -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

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);
_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;

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_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);