base: extend cap_session with memory allocator

Required to allocate memory to remember per session created capabilities.
During session destruction all capabilities have to be freed up.
This commit is contained in:
Alexander Boettcher 2012-11-28 12:13:11 +01:00 committed by Norman Feske
parent f9b82a7b8e
commit 8c4e1b7eb0
7 changed files with 26 additions and 2 deletions

View File

@ -16,6 +16,7 @@
/* Genode includes */
#include <base/rpc_server.h>
#include <base/allocator.h>
namespace Genode {
@ -27,6 +28,8 @@ namespace Genode {
public:
Cap_session_component(Allocator *md_alloc, const char *args) {}
Native_capability alloc(Native_capability ep);
void free(Native_capability cap);

View File

@ -33,6 +33,8 @@ namespace Genode {
public:
Cap_session_component(Allocator *md_alloc, const char *args) {}
Native_capability alloc(Native_capability ep)
{
Lock::Guard lock_guard(_lock());

View File

@ -160,6 +160,7 @@ namespace Genode {
Platform_env_base(Ram_session_capability(),
Cpu_session_capability(),
Pd_session_capability()),
_cap_session(platform()->core_mem_alloc(), "ram_quota=4K"),
_entrypoint(&_cap_session),
_ram_session(&_entrypoint, &_entrypoint,
platform()->ram_alloc(), platform()->core_mem_alloc(),

View File

@ -37,6 +37,16 @@ namespace Genode {
public:
/**
* Constructor
*/
Cap_session_component(Allocator *md_alloc, const char *args) { }
/**
* Destructor
*/
~Cap_session_component() { }
Native_capability alloc(Native_capability ep,
addr_t entry,
addr_t mtd)

View File

@ -24,10 +24,13 @@ namespace Genode {
class Cap_root : public Root_component<Cap_session_component>
{
private:
Allocator *_md_alloc;
protected:
Cap_session_component *_create_session(const char *args) {
return new (md_alloc()) Cap_session_component(); }
return new (md_alloc()) Cap_session_component(_md_alloc, args); }
public:
@ -40,7 +43,9 @@ namespace Genode {
Cap_root(Rpc_entrypoint *session_ep,
Allocator *md_alloc)
:
Root_component<Cap_session_component>(session_ep, md_alloc) { }
Root_component<Cap_session_component>(session_ep, md_alloc),
_md_alloc(md_alloc)
{ }
};
}

View File

@ -33,6 +33,8 @@ namespace Genode {
public:
Cap_session_component(Allocator *md_alloc, const char *args) {}
Native_capability alloc(Native_capability ep)
{
Lock::Guard lock_guard(_lock());

View File

@ -129,6 +129,7 @@ namespace Genode {
* Constructor
*/
Core_env() :
_cap_session(platform()->core_mem_alloc(), "ram_quota=4K"),
_entrypoint(&_cap_session, ENTRYPOINT_STACK_SIZE, "entrypoint"),
_rm_session(&_entrypoint),
_ram_session(&_entrypoint, &_entrypoint,