mirror of
https://github.com/genodelabs/genode.git
synced 2024-12-19 05:37:54 +00:00
base: free 'Cpu_free_component' from EP construction fails
It can happen that when Cpu_free_component is constructed the insertion of the object through 'manage' succeeds for the EP put not for the pager EP, which in turn raises an Out_of_meta_data exception. Because we are within the constructor, the descstructor is not called, leading to a dangling object pool entry for the EP. issue #2289
This commit is contained in:
parent
f272637655
commit
35d2d582a4
@ -154,8 +154,19 @@ class Genode::Cpu_thread_component : public Rpc_object<Cpu_thread>,
|
|||||||
{
|
{
|
||||||
_address_space_region_map.add_client(_rm_client);
|
_address_space_region_map.add_client(_rm_client);
|
||||||
|
|
||||||
/* acquaint thread with its pager object */
|
/*
|
||||||
_pager_ep.manage(&_rm_client);
|
* Acquaint thread with its pager object, caution on some base platforms
|
||||||
|
* this may raise an 'Out_of_meta_data' exception, which causes the
|
||||||
|
* destructor of this object to not being called. Catch it and remove this
|
||||||
|
* object from the object pool
|
||||||
|
*/
|
||||||
|
try {
|
||||||
|
_pager_ep.manage(&_rm_client);
|
||||||
|
} catch (...) {
|
||||||
|
_ep.dissolve(this);
|
||||||
|
throw;
|
||||||
|
}
|
||||||
|
|
||||||
_platform_thread.pager(&_rm_client);
|
_platform_thread.pager(&_rm_client);
|
||||||
_trace_sources.insert(&_trace_source);
|
_trace_sources.insert(&_trace_source);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user