Hi Denis,
> Alloc avail: 0
> [init -> rm_stresser] Round 5
> Quota exceeded! amount=61440, size=8192, consumed=61440
> Uncaught exception of type 'Genode::Allocator::Out_of_memory'
> Warning: abort called - thread: entrypoint
>
> Is there an easy way to upgrade a session's RAM quota before allocating
> objects with no available RAM?
you did everything correctly. The problem is actually that core's RM
service misses to catch the 'Allocator::Out_of_memory' exception. The
attached patch rectifies this. In your test program, you need to catch
'Region_map::Out_of_metadata' instead of 'Allocator::Out_of_memory'.
With this minor change, the test passes.
Thank you very much for pointing us to this problem and for the
super-convenient test case! :-)
Cheers
Norman
--
Dr.-Ing. Norman Feske
Genode Labs
http://www.genode-labs.com · http://genode.org
Genode Labs GmbH · Amtsgericht Dresden · HRB 28424 · Sitz Dresden
Geschäftsführer: Dr.-Ing. Norman Feske, Christian Helmuth
diff --git a/repos/base/src/core/include/rm_session_component.h b/repos/base/src/core/include/rm_session_component.h
index df16fe9..ec4f1f4 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<Rm_session>
{
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<Region_map> rm) override
------------------------------------------------------------------------------
_______________________________________________
genode-main mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/genode-main