From 98f1d83194f8950965d2c6207f036f4749e17e57 Mon Sep 17 00:00:00 2001 From: Emery Hemingway Date: Thu, 24 May 2018 09:40:57 +0200 Subject: [PATCH] Automatic session quota upgrades for RM connections Fix #2838 --- repos/base/include/rm_session/connection.h | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/repos/base/include/rm_session/connection.h b/repos/base/include/rm_session/connection.h index 607740a87..78fc56748 100644 --- a/repos/base/include/rm_session/connection.h +++ b/repos/base/include/rm_session/connection.h @@ -5,7 +5,7 @@ */ /* - * Copyright (C) 2008-2017 Genode Labs GmbH + * Copyright (C) 2008-2018 Genode Labs GmbH * * This file is part of the Genode OS framework, which is distributed * under the terms of the GNU Affero General Public License version 3. @@ -16,6 +16,7 @@ #include #include +#include namespace Genode { struct Rm_connection; } @@ -46,6 +47,25 @@ struct Genode::Rm_connection : Connection, Rm_session_client Connection(session("ram_quota=%u, cap_quota=%u", RAM_QUOTA, CAP_QUOTA)), Rm_session_client(cap()) { } + + /** + * Wrapper over 'create' that handles resource requests + * from the server. + */ + Capability create(size_t size) override + { + enum { UPGRADE_ATTEMPTS = 16U }; + + return Genode::retry( + [&] () { + return Genode::retry( + [&] () { return Rm_session_client::create(size); }, + [&] () { upgrade_caps(2); }, + UPGRADE_ATTEMPTS); + }, + [&] () { upgrade_ram(8*1024); }, + UPGRADE_ATTEMPTS); + } }; #endif /* _INCLUDE__RM_SESSION__CONNECTION_H_ */