mirror of
https://github.com/genodelabs/genode.git
synced 2025-02-21 02:01:38 +00:00
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:
parent
5e460394d2
commit
9eb20c2be7
@ -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;
|
||||
}
|
||||
|
@ -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
|
||||
|
@ -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;
|
||||
|
@ -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);
|
||||
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user