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