From fac69eff48b3d70a9d37ebc5d3ae67465b612150 Mon Sep 17 00:00:00 2001 From: Norman Feske Date: Thu, 25 Aug 2016 16:55:12 +0200 Subject: [PATCH] core: handle out-of-memory in RM service This patch adds the missing exception handling for depleted RM session quotas. If core runs out of session quota while creating a new region map, it now reflects this condition as a Region_map::Out_of_metadata exception to the RM client. Thanks to Denis Huber for reporting the issue! --- repos/base/src/core/include/rm_session_component.h | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/repos/base/src/core/include/rm_session_component.h b/repos/base/src/core/include/rm_session_component.h index b78a67221d..fbf905f8ed 100644 --- a/repos/base/src/core/include/rm_session_component.h +++ b/repos/base/src/core/include/rm_session_component.h @@ -77,13 +77,16 @@ class Genode::Rm_session_component : public Rpc_object { Lock::Guard guard(_region_maps_lock); - Region_map_component *rm = - new (_md_alloc) - Region_map_component(_ep, _md_alloc, _pager_ep, 0, size); + try { + Region_map_component *rm = + new (_md_alloc) + Region_map_component(_ep, _md_alloc, _pager_ep, 0, size); - _region_maps.insert(rm); + _region_maps.insert(rm); - return rm->cap(); + return rm->cap(); + } + catch (Allocator::Out_of_memory) { throw Out_of_metadata(); } } void destroy(Capability rm) override