mirror of
https://github.com/genodelabs/genode.git
synced 2025-02-21 10:01:57 +00:00
parent
ebfd6a55b3
commit
8d1e40eb5b
@ -186,11 +186,6 @@ class Kernel::Ipc_node
|
||||
*/
|
||||
virtual void _received_ipc_request(size_t const s) = 0;
|
||||
|
||||
/**
|
||||
* IPC node started waiting for message receipt
|
||||
*/
|
||||
virtual void _await_ipc() = 0;
|
||||
|
||||
/**
|
||||
* IPC node returned from waiting due to message receipt
|
||||
*
|
||||
@ -256,7 +251,6 @@ class Kernel::Ipc_node
|
||||
/* update state */
|
||||
if (_state != PREPARE_REPLY) { _state = AWAIT_REPLY; }
|
||||
else { _state = PREPARE_AND_AWAIT_REPLY; }
|
||||
_await_ipc();
|
||||
|
||||
/* announce request */
|
||||
dst->_announce_request(&_outbuf);
|
||||
@ -267,8 +261,10 @@ class Kernel::Ipc_node
|
||||
*
|
||||
* \param inbuf_base base of the request buffer
|
||||
* \param inbuf_size size of the request buffer
|
||||
*
|
||||
* \return wether a request could be received already
|
||||
*/
|
||||
void await_request(void * const inbuf_base,
|
||||
bool await_request(void * const inbuf_base,
|
||||
size_t const inbuf_size)
|
||||
{
|
||||
/* assertions */
|
||||
@ -283,11 +279,11 @@ class Kernel::Ipc_node
|
||||
if (!_request_queue.empty()) {
|
||||
_receive_request(_request_queue.dequeue());
|
||||
_received_ipc_request(_inbuf.size);
|
||||
return;
|
||||
return true;
|
||||
}
|
||||
/* no request announced, so wait */
|
||||
_state = AWAIT_REQUEST;
|
||||
_await_ipc();
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -85,20 +85,6 @@ void Thread::_received_ipc_request(size_t const s)
|
||||
}
|
||||
|
||||
|
||||
void Thread::_await_ipc()
|
||||
{
|
||||
switch (_state) {
|
||||
case SCHEDULED:
|
||||
_unschedule(AWAITS_IPC);
|
||||
return;
|
||||
default:
|
||||
PWRN("wrong thread state to await IPC");
|
||||
_stop();
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void Thread::_await_ipc_succeeded(size_t const s)
|
||||
{
|
||||
switch (_state) {
|
||||
@ -432,7 +418,8 @@ void Thread::_call_await_request_msg()
|
||||
void * buf_base;
|
||||
size_t buf_size;
|
||||
_utcb_phys->message()->info_about_await_request(buf_base, buf_size);
|
||||
Ipc_node::await_request(buf_base, buf_size);
|
||||
if (Ipc_node::await_request(buf_base, buf_size)) { return; }
|
||||
_unschedule(AWAITS_IPC);
|
||||
}
|
||||
|
||||
|
||||
@ -441,7 +428,7 @@ void Thread::_call_send_request_msg()
|
||||
Thread * const dst = Thread::pool()->object(user_arg_1());
|
||||
if (!dst) {
|
||||
PWRN("unknown recipient");
|
||||
_await_ipc();
|
||||
_unschedule(AWAITS_IPC);
|
||||
return;
|
||||
}
|
||||
void * msg_base;
|
||||
@ -452,6 +439,7 @@ void Thread::_call_send_request_msg()
|
||||
buf_base, buf_size);
|
||||
Ipc_node::send_request_await_reply(dst, msg_base, msg_size,
|
||||
buf_base, buf_size);
|
||||
_unschedule(AWAITS_IPC);
|
||||
}
|
||||
|
||||
|
||||
|
@ -281,7 +281,6 @@ class Kernel::Thread
|
||||
**************/
|
||||
|
||||
void _received_ipc_request(size_t const s);
|
||||
void _await_ipc();
|
||||
void _await_ipc_succeeded(size_t const s);
|
||||
void _await_ipc_failed();
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user