diff --git a/repos/base/include/rm_session/connection.h b/repos/base/include/rm_session/connection.h index 607740a87d..78fc56748e 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_ */