mirror of
https://github.com/genodelabs/genode.git
synced 2024-12-28 01:28:53 +00:00
a5ea6765d1
This commit fixes several issues that were triggered e.g. by the 'noux_tool_chain' run-script (fix #208 in part). The following problems are tackled: * Don't reference count capability selectors within a task that are actually controlled by core (all beneath 0x200000), because it's undecideable which "version" of a capability selector we currently use, e.g. a thread gets destroyed and a new one gets created immediately some other thread might have a Native_capability pointing to the already destroyed thread's gate capability-slot, that is now a new valid one (the one of the new thread) * In core we cannot invalidate and remove a capability from the so called Cap_map before each reference to it is destroyed, so don't do this in Cap_session_component::free, but only reference-decrement within there, the actual removal can only be done in Cap_map::remove. Because core also has to invalidate a capability to be removed in all protection-domains we have to implement a core specific Cap_map::remove method * When a capability gets inserted into the Cap_map, and we detect an old invalid entry with the dame id in the tree, don't just overmap that invalid entry (as there exist remaining references to it), but just remove it from the tree and allocate an new entry. * Use the Cap_session_component interface to free a Pager_object when it gets dissolved, as its also used for allocation
13 lines
583 B
Makefile
13 lines
583 B
Makefile
SRC_CC = env.cc context_area.cc cap_map.cc cap_alloc.cc \
|
|
reload_parent_cap.cc spin_lock.cc cap_map_remove.cc
|
|
LIBS = ipc heap log_console lock
|
|
INC_DIR += $(REP_DIR)/src/base/lock $(BASE_DIR)/src/base/lock
|
|
|
|
vpath env.cc $(BASE_DIR)/src/base/env
|
|
vpath context_area.cc $(BASE_DIR)/src/base/env
|
|
vpath cap_map.cc $(REP_DIR)/src/base/env
|
|
vpath cap_map_remove.cc $(REP_DIR)/src/base/env
|
|
vpath cap_alloc.cc $(REP_DIR)/src/base/env
|
|
vpath spin_lock.cc $(REP_DIR)/src/base/env
|
|
vpath reload_parent_cap.cc $(BASE_DIR)/src/base/env
|