mirror of
https://github.com/genodelabs/genode.git
synced 2025-06-12 20:28:20 +00:00
Remove exceptions from Pd_session interface
This patch replaces exceptions of the PD session RPC interface with result types. The change of the quota-transfer RPC functions required the adaptation of base/quota_transfer.h and base/child.h. The 'alloc_signal_source' method has been renamed to 'signal_source' to avoid an exceedingly long name of the corresponding result type. The Pd_session::map function takes a 'Virt_range' instead of basic-type arguments. The 'Signal_source_capability' alias for 'Capability<Signal_source>' has been removed. Issue #5245
This commit is contained in:
@ -41,18 +41,26 @@ Native_capability Rpc_entrypoint::_alloc_rpc_cap(Pd_session& pd, Native_capabili
|
||||
{
|
||||
/* first we allocate a cap from core, to allow accounting of caps. */
|
||||
for (;;) {
|
||||
Ram_quota ram_upgrade { 0 };
|
||||
Cap_quota cap_upgrade { 0 };
|
||||
|
||||
try { pd.alloc_rpc_cap(_cap); break; }
|
||||
catch (Out_of_ram) { ram_upgrade = Ram_quota { 2*1024*sizeof(long) }; }
|
||||
catch (Out_of_caps) { cap_upgrade = Cap_quota { 4 }; }
|
||||
Pd_session::Alloc_rpc_cap_result const result = pd.alloc_rpc_cap(_cap);
|
||||
if (result.ok())
|
||||
break;
|
||||
|
||||
_parent().upgrade(Parent::Env::pd(),
|
||||
String<100>("ram_quota=", ram_upgrade, ", "
|
||||
"cap_quota=", cap_upgrade).string());
|
||||
using Error = Pd_session::Alloc_rpc_cap_error;
|
||||
pd.alloc_rpc_cap(_cap).with_error([&] (Error e) {
|
||||
|
||||
Ram_quota ram_upgrade { 0 };
|
||||
Cap_quota cap_upgrade { 0 };
|
||||
|
||||
switch (e) {
|
||||
case Error::OUT_OF_RAM: ram_upgrade = { 2*1024*sizeof(long) }; break;
|
||||
case Error::OUT_OF_CAPS: cap_upgrade = { 4 }; break;
|
||||
}
|
||||
_parent().upgrade(Parent::Env::pd(),
|
||||
String<100>("ram_quota=", ram_upgrade, ", "
|
||||
"cap_quota=", cap_upgrade).string());
|
||||
});
|
||||
}
|
||||
|
||||
return Thread::native_thread().epoll.alloc_rpc_cap();
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user