base-linux: support invalid dataspace for RM client

This restores behavior introduced in

  commit cb232891bf
  Author: Norman Feske <norman.feske@genode-labs.com>
  Date:   Tue May 10 11:55:25 2016 +0200

    Fix noux.run on base-linux

but removed by issue #2829.

Related to issue #1938
This commit is contained in:
Christian Helmuth 2019-12-06 14:14:49 +01:00
parent 6dae147785
commit 4299b85cdb
1 changed files with 8 additions and 5 deletions

View File

@ -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<Region_map> cap)
{
if (!cap.valid())
throw Invalid_capability();
throw Capability_invalid();
return Local_capability<Region_map>::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(); }
}