From 4299b85cdb05bb86151c872f6198fc023403e7b2 Mon Sep 17 00:00:00 2001 From: Christian Helmuth Date: Fri, 6 Dec 2019 14:14:49 +0100 Subject: [PATCH] base-linux: support invalid dataspace for RM client This restores behavior introduced in commit cb232891bfb1882e9ef7b8a250eb4b14e0825434 Author: Norman Feske Date: Tue May 10 11:55:25 2016 +0200 Fix noux.run on base-linux but removed by issue #2829. Related to issue #1938 --- repos/base-linux/src/lib/base/region_map_client.cc | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/repos/base-linux/src/lib/base/region_map_client.cc b/repos/base-linux/src/lib/base/region_map_client.cc index 3b50f50f9..e45c3fbdc 100644 --- a/repos/base-linux/src/lib/base/region_map_client.cc +++ b/repos/base-linux/src/lib/base/region_map_client.cc @@ -19,7 +19,7 @@ using namespace Genode; -class Invalid_capability : public Genode::Exception {}; +class Capability_invalid : public Genode::Exception {}; /** * Return pointer to locally implemented region map @@ -29,7 +29,7 @@ class Invalid_capability : public Genode::Exception {}; static Region_map *_local(Capability cap) { if (!cap.valid()) - throw Invalid_capability(); + throw Capability_invalid(); return Local_capability::deref(cap); } @@ -67,6 +67,9 @@ void Region_map_client::fault_handler(Signal_context_capability /*handler*/) Region_map::State Region_map_client::state() { return _local(rpc_cap())->state(); } -Dataspace_capability Region_map_client::dataspace() { - return _local(rpc_cap()) ? _local(rpc_cap())->dataspace() : Dataspace_capability(); } - +Dataspace_capability Region_map_client::dataspace() +{ + try { + return _local(rpc_cap())->dataspace(); + } catch (Capability_invalid&) { return Dataspace_capability(); } +}