mirror of
https://github.com/genodelabs/genode.git
synced 2024-12-22 06:57:51 +00:00
7868156b19
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 |
||
---|---|---|
.. | ||
etc | ||
include | ||
lib | ||
mk | ||
run | ||
src | ||
README |
This is generic part of the Genode implementation. It consists of two parts: :_Core_: is the ultimate root of the Genode application tree and provides abstractions for the lowest-level hardware resources such as RAM, ROM, CPU, and generic device access. All generic parts of Core can be found here - for system-specific implementations refer to the appropriate 'base-<system>' directory. :_Base libraries and protocols_: that are used by each Genode component to interact with other components. This is the glue that holds everything together.