mirror of
https://github.com/genodelabs/genode.git
synced 2025-03-11 06:54:18 +00:00
During a ram_session->free call in 'core' the lock in core_env.h is taken. Then in the ram_session::_free_ds implementation the dissolve function for the dataspace is called. base-nova tries to make sure that the ds is not accessible anymore by any kind of parallel incoming IPC by performing a cleanup IPC. Unfortunately the dataspace_session implementation uses the very same allocator in 'core' and may require to obtain the same lock as taken in ram_session->free. This leads to a spurious deadlock on base-nova. The actual free_ds implementation is mostly thread safe, since all used objects inside there are already locked. The only missing piece is the _payload variable. By changing the _payload variable in a atomic fashion there is no need to lock the whole ram_session->free call which avoids deadlocks on base-nova. Fixes #549
This directory contains all source codes.