mirror of
https://github.com/genodelabs/genode.git
synced 2024-12-27 01:11:06 +00:00
f8c97e7189
Following deadlock happens when a Rm_client/Pager_object handles a page-fault and concurrently the same object is dissolved (triggered by parent killing the client). The situation is as follows: Page fault handling : base-nova/src/base/pager/pager.cc : pf_handler() - lock pf_lock base/.../core/rm_session_component.cc: pager() - lock rm_session (in reverse_lookup()) Dissolve of Rm_client: base/src/core/rm_session_component.cc: dissolve() - lock rm_session base-nova/src/base/pager/pager.cc : dissolve() - lock pf_lock The pf_lock is not required here during normal page fault handling, since this pager object @NOVA is executed only by one and the same thread and all critical operations inside the rm_session_object itself are locked anyway. The only critical point is the destruction of the Pager_object which is already handled in the both dissolve functions of the rm-session_component (locking) and the pager_object (finalize in-flight page faults). |
||
---|---|---|
.. | ||
pager.cc |