diff --git a/repos/os/src/server/fs_rom/main.cc b/repos/os/src/server/fs_rom/main.cc index 984314f01..90abca203 100755 --- a/repos/os/src/server/fs_rom/main.cc +++ b/repos/os/src/server/fs_rom/main.cc @@ -313,6 +313,14 @@ class Fs_rom::Rom_session_component : public Rpc_object { try { _open_watch_handle(); } catch (Watch_failed) { } + + /** + * XXX: fix for live-lock, this constructor is called when this + * component handles a sesson_requests ROM signal, and preparing + * the dataspace now will hopefully prevent any interaction with + * the parent when the dataspace RPC method is called. + */ + _try_read_dataspace(UPDATE_OR_REPLACE); } /** @@ -326,7 +334,7 @@ class Fs_rom::Rom_session_component : public Rpc_object /** * Return dataspace with up-to-date content of file */ - Rom_dataspace_capability dataspace() + Rom_dataspace_capability dataspace() override { using namespace File_system; @@ -341,7 +349,7 @@ class Fs_rom::Rom_session_component : public Rpc_object return static_cap_cast(ds); } - void sigh(Signal_context_capability sigh) + void sigh(Signal_context_capability sigh) override { _sigh = sigh;