genode/base
Alexander Boettcher 7868156b19 base: fix deadlock in core_env on base-nova
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
2013-02-11 12:01:26 +01:00
..
etc Imported Genode release 11.11 2011-12-22 16:19:25 +01:00
include base: add remove_client to rm_session 2013-02-11 12:01:25 +01:00
lib Move 'Child' API implementation to library 2012-10-09 13:45:33 +02:00
mk base-hw & imx31: userland timer driver 2013-01-08 11:36:52 +01:00
run base: enable rm_fault test case for nova 2013-01-16 16:06:36 +01:00
src base: fix deadlock in core_env on base-nova 2013-02-11 12:01:26 +01:00
README Imported Genode release 11.11 2011-12-22 16:19:25 +01:00

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.