mirror of
https://github.com/genodelabs/genode.git
synced 2025-02-20 17:52:52 +00:00
parent
fb5f464a01
commit
a423ae67a4
@ -74,6 +74,7 @@ class Noux::Rom_session_component : public Rpc_object<Rom_session>
|
||||
|
||||
private:
|
||||
|
||||
Allocator &_alloc;
|
||||
Rpc_entrypoint &_ep;
|
||||
Vfs::Dir_file_system &_root_dir;
|
||||
Dataspace_registry &_ds_registry;
|
||||
@ -126,7 +127,7 @@ class Noux::Rom_session_component : public Rpc_object<Rom_session>
|
||||
Vfs::Dir_file_system &root_dir,
|
||||
Dataspace_registry &ds_registry, Name const &name)
|
||||
:
|
||||
_ep(ep), _root_dir(root_dir), _ds_registry(ds_registry),
|
||||
_alloc(alloc), _ep(ep), _root_dir(root_dir), _ds_registry(ds_registry),
|
||||
_ds_cap(_init_ds_cap(env, name))
|
||||
{
|
||||
_ep.manage(this);
|
||||
@ -135,11 +136,13 @@ class Noux::Rom_session_component : public Rpc_object<Rom_session>
|
||||
|
||||
~Rom_session_component()
|
||||
{
|
||||
Rom_dataspace_info *ds_info = nullptr;
|
||||
|
||||
/*
|
||||
* Lookup and lock ds info instead of directly accessing
|
||||
* the '_ds_info' member.
|
||||
*/
|
||||
_ds_registry.apply(_ds_cap, [this] (Dataspace_info *info) {
|
||||
_ds_registry.apply(_ds_cap, [&] (Rom_dataspace_info *info) {
|
||||
|
||||
if (!info) {
|
||||
error("~Rom_session_component: unexpected !info");
|
||||
@ -149,7 +152,10 @@ class Noux::Rom_session_component : public Rpc_object<Rom_session>
|
||||
_ds_registry.remove(info);
|
||||
|
||||
info->dissolve_users();
|
||||
|
||||
ds_info = info;
|
||||
});
|
||||
destroy(_alloc, ds_info);
|
||||
_ep.dissolve(this);
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user