4ece3b3c77
Rm_client is derived from Pager_object. If the Pager_object is also derived from Thread_base (which is the case for NOVA) then the Rm_client object must be destructed without holding the rm_session_object lock. The native platform specific Thread_base implementation has to take care that all in-flight page handling requests are finished before destruction. On NOVA it is done by doing an IPC to the pager thread. (performed in Pager_object::dissolve() in base-nova). The called thread than executes its operation until end which also requires in some cases to take the rm_session_object lock. Since _client_slab insertion/deletion also must be performed synchronized but can't be protected by the rm_session_object lock because of the described dead_lock situation, we have to use a synchronized allocator object to perform insertion and deletion of Rm_clients. |
||
---|---|---|
.. | ||
cap_root.h | ||
cap_session_component.h | ||
core_env.h | ||
core_mem_alloc.h | ||
core_parent.h | ||
core_rm_session.h | ||
cpu_root.h | ||
cpu_session_component.h | ||
dataspace_component.h | ||
io_mem_root.h | ||
io_mem_session_component.h | ||
io_port_root.h | ||
io_port_session_component.h | ||
irq_root.h | ||
irq_session_component.h | ||
log_root.h | ||
log_session_component.h | ||
multiboot.h | ||
pd_root.h | ||
pd_session_component.h | ||
platform_generic.h | ||
ram_root.h | ||
ram_session_component.h | ||
rm_root.h | ||
rm_session_component.h | ||
rom_fs.h | ||
rom_root.h | ||
rom_session_component.h | ||
signal_root.h | ||
signal_session_component.h |