From f1fa55e804ebbe9f34978aca024829e0a3d9312c Mon Sep 17 00:00:00 2001 From: Alexander Boettcher Date: Mon, 30 Jul 2012 12:09:25 +0200 Subject: [PATCH] NOVA: Suppress warnings in rpc_entrypoint --- base-nova/src/base/lock/lock_helper.h | 4 ++-- base-nova/src/base/server/server.cc | 29 ++++++++++++++------------- 2 files changed, 17 insertions(+), 16 deletions(-) diff --git a/base-nova/src/base/lock/lock_helper.h b/base-nova/src/base/lock/lock_helper.h index 0e0386aa4..0c375550c 100644 --- a/base-nova/src/base/lock/lock_helper.h +++ b/base-nova/src/base/lock/lock_helper.h @@ -66,14 +66,14 @@ static inline Genode::Native_thread_id thread_get_my_native_id() static inline Genode::Native_thread_id thread_invalid_id() { - Genode::Native_thread_id tid = { 0, 0, -1 }; + Genode::Native_thread_id tid = { 0, 0, ~0UL }; return tid; } static inline bool thread_id_valid(Genode::Native_thread_id tid) { - return tid.rs_sel != -1; + return tid.rs_sel != ~0UL; } diff --git a/base-nova/src/base/server/server.cc b/base-nova/src/base/server/server.cc index e86d63c4d..62cb84510 100644 --- a/base-nova/src/base/server/server.cc +++ b/base-nova/src/base/server/server.cc @@ -55,7 +55,7 @@ Untyped_capability Rpc_entrypoint::_manage(Rpc_object_base *obj) void Rpc_entrypoint::_dissolve(Rpc_object_base *obj) { - /* Avoid any incoming IPC early, keep local selector */ + /* Avoid any incoming IPC early, keep local cap solely */ Nova::revoke(Nova::Obj_crd(obj->cap().local_name(), 0), false); /* make sure nobody is able to find this object */ @@ -78,11 +78,11 @@ void Rpc_entrypoint::_dissolve(Rpc_object_base *obj) /* De-announce object from cap_session */ _cap_session->free(obj->cap()); - /* Revoke local selector finally */ + /* Revoke also local cap finally */ Nova::revoke(Nova::Obj_crd(obj->cap().local_name(), 0), true); - /* free cap selector ??? XXX */ - //cap_selector_allocator()->free(obj->cap().local_name(), 0); + /* free cap selector */ + cap_selector_allocator()->free(obj->cap().local_name(), 0); } void Rpc_entrypoint::_activation_entry() @@ -114,16 +114,16 @@ void Rpc_entrypoint::_activation_entry() ep->_curr_obj = ep->obj_by_id(id_pt); if (!ep->_curr_obj || !id_pt) { -/* - ep->_curr_obj = ep->obj_by_id(srv.badge()); - if (!ep->_curr_obj) { -*/ + /* Badge is used to suppress error message solely. + * It's non zero during cleanup call of an + * rpc_object_base object, see _leave_server_object. + */ + if (!srv.badge()) PERR("could not look up server object, " - " return from call badge=%lx id_pt=%lx", - srv.badge(), id_pt); - ep->_curr_obj_lock.unlock(); - srv << IPC_REPLY; -// } + " return from call id_pt=%lx", + id_pt); + ep->_curr_obj_lock.unlock(); + srv << IPC_REPLY; } ep->_curr_obj->lock(); @@ -162,7 +162,8 @@ void Rpc_entrypoint::_leave_server_object(Rpc_object_base *obj) Thread_base::myself()->utcb()); /* don't call ourself */ if (utcb != reinterpret_cast(&_context->utcb)) { - utcb->set_msg_word(0); + utcb->msg[0] = 0xdead; + utcb->set_msg_word(1); if (uint8_t res = Nova::call(obj->cap().local_name())) PERR("could not clean up entry point - %u", res); }