From fe734272bc79cad249d0873fc7739eee0432975e Mon Sep 17 00:00:00 2001 From: Norman Feske Date: Mon, 14 Jan 2013 12:12:36 +0100 Subject: [PATCH] Make 'config()' convenience utility more robust This patch improves the config handling by falling back to a static string (empty "") if no valid config ROM module could be found. This can happen initially, but also at runtime when the ROM module dissapears, e.g., a ROM module accessed via fs_rom where the corresponding file gets unlinked. --- os/include/os/config.h | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/os/include/os/config.h b/os/include/os/config.h index 1c2a326b1a..9dcf2931cf 100644 --- a/os/include/os/config.h +++ b/os/include/os/config.h @@ -29,6 +29,15 @@ namespace Genode { Dataspace_capability _config_ds; Xml_node _config_xml; + Xml_node _config_xml_node() + { + if (_config_ds.valid()) + return Xml_node(env()->rm_session()->attach(_config_ds), + Genode::Dataspace_client(_config_ds).size()); + else + return Xml_node(""); + } + public: /** @@ -42,8 +51,7 @@ namespace Genode { Config() : _config_rom("config"), _config_ds(_config_rom.dataspace()), - _config_xml(env()->rm_session()->attach(_config_ds), - Genode::Dataspace_client(_config_ds).size()) + _config_xml(_config_xml_node()) { } Xml_node xml_node() { return _config_xml; } @@ -65,12 +73,13 @@ namespace Genode { { try { /* re-acquire dataspace from ROM session */ - env()->rm_session()->detach(_config_xml.addr()); + if (_config_ds.valid()) + env()->rm_session()->detach(_config_xml.addr()); + _config_ds = _config_rom.dataspace(); /* re-initialize XML node with new config data */ - _config_xml = Xml_node(env()->rm_session()->attach(_config_ds), - Genode::Dataspace_client(_config_ds).size()); + _config_xml = _config_xml_node(); } catch (Genode::Xml_node::Invalid_syntax) { PERR("Config file has invalid syntax");