Noux: destroy 'Rom_dataspace_info' objects

Fixes #2271
This commit is contained in:
Christian Prochaska 2017-01-30 12:11:37 +01:00 committed by Norman Feske
parent fb5f464a01
commit a423ae67a4

View File

@ -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);
}