From 6fb70225088a131767d10a8eb88c660320671a43 Mon Sep 17 00:00:00 2001 From: Norman Feske Date: Sat, 17 Aug 2019 00:17:23 +0200 Subject: [PATCH] Cap-resource request on Pd_session::transfer_quota This patch handles the case where a PD's cap quota becomes exhausted on the attempt to transfer caps via 'Env::pd().transfer_quota'. The solution mirrors the existing code for RAM quota. Prior this patch, the 'transfer_quota' operation would trigger an 'Out_of_caps' exception. --- .../include/base/internal/expanding_pd_session_client.h | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/repos/base/src/include/base/internal/expanding_pd_session_client.h b/repos/base/src/include/base/internal/expanding_pd_session_client.h index 782e954f63..aeed257ff5 100644 --- a/repos/base/src/include/base/internal/expanding_pd_session_client.h +++ b/repos/base/src/include/base/internal/expanding_pd_session_client.h @@ -85,6 +85,15 @@ struct Genode::Expanding_pd_session_client : Pd_session_client [&] () { _request_ram_from_parent(amount.value); }, NUM_ATTEMPTS); } + + void transfer_quota(Pd_session_capability pd_session, Cap_quota amount) override + { + enum { NUM_ATTEMPTS = 2 }; + retry( + [&] () { Pd_session_client::transfer_quota(pd_session, amount); }, + [&] () { _request_caps_from_parent(amount.value); }, + NUM_ATTEMPTS); + } }; #endif /* _INCLUDE__BASE__INTERNAL__EXPANDING_PD_SESSION_CLIENT_H_ */