mirror of
https://github.com/genodelabs/genode.git
synced 2025-06-07 18:01:45 +00:00
base: move common exception types to exception.h
The univerally used exception types Out_of_ram, Out_of_caps, and Denied used to be defined at quota_guard.h and ram_allocator.h whereas the types are broadly used. This patch gathers those type definitions at the central place exception.h instead, to gradually untangle the reliance on exceptions, i.e., in quota_goard.h, and to make the output of error messages printing exception types ('abort') more concise. Issue #5245
This commit is contained in:
parent
7e0d2084fb
commit
2e76f4fc58
@ -60,16 +60,13 @@ struct Genode::Deallocator : Interface
|
|||||||
|
|
||||||
struct Genode::Allocator : Deallocator
|
struct Genode::Allocator : Deallocator
|
||||||
{
|
{
|
||||||
/**
|
|
||||||
* Exception type
|
|
||||||
*/
|
|
||||||
using Out_of_memory = Out_of_ram;
|
using Out_of_memory = Out_of_ram;
|
||||||
using Denied = Ram_allocator::Denied;
|
using Denied = Genode::Denied;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Return type of 'try_alloc'
|
* Return type of 'try_alloc'
|
||||||
*/
|
*/
|
||||||
using Alloc_error = Ram_allocator::Alloc_error;
|
using Alloc_error = Genode::Alloc_error;
|
||||||
using Alloc_result = Attempt<void *, Alloc_error>;
|
using Alloc_result = Attempt<void *, Alloc_error>;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -1,11 +1,11 @@
|
|||||||
/*
|
/*
|
||||||
* \brief Exception base class
|
* \brief Common exception types
|
||||||
* \author Norman Feske
|
* \author Norman Feske
|
||||||
* \date 2008-03-22
|
* \date 2008-03-22
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Copyright (C) 2008-2017 Genode Labs GmbH
|
* Copyright (C) 2008-2025 Genode Labs GmbH
|
||||||
*
|
*
|
||||||
* This file is part of the Genode OS framework, which is distributed
|
* This file is part of the Genode OS framework, which is distributed
|
||||||
* under the terms of the GNU Affero General Public License version 3.
|
* under the terms of the GNU Affero General Public License version 3.
|
||||||
@ -14,8 +14,12 @@
|
|||||||
#ifndef _INCLUDE__BASE__EXCEPTION_H_
|
#ifndef _INCLUDE__BASE__EXCEPTION_H_
|
||||||
#define _INCLUDE__BASE__EXCEPTION_H_
|
#define _INCLUDE__BASE__EXCEPTION_H_
|
||||||
|
|
||||||
namespace Genode { class Exception; }
|
namespace Genode {
|
||||||
|
|
||||||
class Genode::Exception { };
|
struct Exception { };
|
||||||
|
struct Out_of_ram : Exception { };
|
||||||
|
struct Out_of_caps : Exception { };
|
||||||
|
struct Denied : Exception { };
|
||||||
|
}
|
||||||
|
|
||||||
#endif /* _INCLUDE__BASE__EXCEPTION_H_ */
|
#endif /* _INCLUDE__BASE__EXCEPTION_H_ */
|
||||||
|
@ -22,6 +22,8 @@ namespace Genode {
|
|||||||
|
|
||||||
struct Ram_quota
|
struct Ram_quota
|
||||||
{
|
{
|
||||||
|
using Exhausted_exception = Out_of_ram;
|
||||||
|
|
||||||
size_t value;
|
size_t value;
|
||||||
|
|
||||||
static char const *name() { return "bytes"; }
|
static char const *name() { return "bytes"; }
|
||||||
@ -31,6 +33,8 @@ namespace Genode {
|
|||||||
|
|
||||||
struct Cap_quota
|
struct Cap_quota
|
||||||
{
|
{
|
||||||
|
using Exhausted_exception = Out_of_caps;
|
||||||
|
|
||||||
size_t value;
|
size_t value;
|
||||||
|
|
||||||
static char const *name() { return "caps"; }
|
static char const *name() { return "caps"; }
|
||||||
@ -171,7 +175,7 @@ class Genode::Quota_guard
|
|||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
struct Limit_exceeded : Exception { };
|
using Limit_exceeded = typename UNIT::Exhausted_exception;
|
||||||
|
|
||||||
Quota_guard() { }
|
Quota_guard() { }
|
||||||
Quota_guard(UNIT amount) { upgrade(amount); }
|
Quota_guard(UNIT amount) { upgrade(amount); }
|
||||||
@ -288,12 +292,8 @@ class Genode::Quota_guard
|
|||||||
|
|
||||||
|
|
||||||
namespace Genode {
|
namespace Genode {
|
||||||
|
|
||||||
using Ram_quota_guard = Quota_guard<Ram_quota>;
|
using Ram_quota_guard = Quota_guard<Ram_quota>;
|
||||||
using Cap_quota_guard = Quota_guard<Cap_quota>;
|
using Cap_quota_guard = Quota_guard<Cap_quota>;
|
||||||
|
|
||||||
using Out_of_ram = Ram_quota_guard::Limit_exceeded;
|
|
||||||
using Out_of_caps = Cap_quota_guard::Limit_exceeded;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif /* _INCLUDE__BASE__QUOTA_GUARD_H_ */
|
#endif /* _INCLUDE__BASE__QUOTA_GUARD_H_ */
|
||||||
|
@ -31,8 +31,6 @@ namespace Genode {
|
|||||||
|
|
||||||
struct Genode::Ram_allocator : Ram::Unmapped_allocator
|
struct Genode::Ram_allocator : Ram::Unmapped_allocator
|
||||||
{
|
{
|
||||||
struct Denied : Exception { };
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Allocate RAM
|
* Allocate RAM
|
||||||
*
|
*
|
||||||
@ -75,6 +73,7 @@ struct Genode::Ram_allocator : Ram::Unmapped_allocator
|
|||||||
/* type aliases used for API transition */
|
/* type aliases used for API transition */
|
||||||
using Alloc_result = Ram::Unmapped_allocator::Result;
|
using Alloc_result = Ram::Unmapped_allocator::Result;
|
||||||
using Alloc_error = Ram::Error;
|
using Alloc_error = Ram::Error;
|
||||||
|
using Denied = Genode::Denied;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@ -87,7 +86,7 @@ namespace Genode {
|
|||||||
case Ram::Error::OUT_OF_CAPS: throw Out_of_caps();
|
case Ram::Error::OUT_OF_CAPS: throw Out_of_caps();
|
||||||
case Ram::Error::DENIED: break;
|
case Ram::Error::DENIED: break;
|
||||||
}
|
}
|
||||||
throw Ram_allocator::Denied();
|
throw Denied();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -14,6 +14,7 @@
|
|||||||
#ifndef _INCLUDE__SESSION__SESSION_H_
|
#ifndef _INCLUDE__SESSION__SESSION_H_
|
||||||
#define _INCLUDE__SESSION__SESSION_H_
|
#define _INCLUDE__SESSION__SESSION_H_
|
||||||
|
|
||||||
|
#include <base/exception.h>
|
||||||
#include <base/quota_guard.h>
|
#include <base/quota_guard.h>
|
||||||
#include <base/session_label.h>
|
#include <base/session_label.h>
|
||||||
#include <util/arg_string.h>
|
#include <util/arg_string.h>
|
||||||
@ -34,7 +35,7 @@ namespace Genode {
|
|||||||
*/
|
*/
|
||||||
struct Insufficient_ram_quota : Exception { };
|
struct Insufficient_ram_quota : Exception { };
|
||||||
struct Insufficient_cap_quota : Exception { };
|
struct Insufficient_cap_quota : Exception { };
|
||||||
struct Service_denied : Exception { };
|
using Service_denied = Denied;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -27,6 +27,11 @@ namespace Core { template <typename> class Account; }
|
|||||||
template <typename UNIT>
|
template <typename UNIT>
|
||||||
class Core::Account
|
class Core::Account
|
||||||
{
|
{
|
||||||
|
public:
|
||||||
|
|
||||||
|
using Limit_exceeded = UNIT::Exhausted_exception;
|
||||||
|
using Guard = Quota_guard<UNIT>;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -35,7 +40,7 @@ class Core::Account
|
|||||||
Account(Account const &);
|
Account(Account const &);
|
||||||
Account &operator = (Account const &);
|
Account &operator = (Account const &);
|
||||||
|
|
||||||
Quota_guard<UNIT> &_quota_guard;
|
Guard &_quota_guard;
|
||||||
|
|
||||||
Session::Label const &_label;
|
Session::Label const &_label;
|
||||||
|
|
||||||
@ -88,16 +93,11 @@ class Core::Account
|
|||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
using Limit_exceeded = typename Quota_guard<UNIT>::Limit_exceeded;
|
|
||||||
|
|
||||||
class Unrelated_account : Exception { };
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Constructor for creating a regular account that is rechargeable by
|
* Constructor for creating a regular account that is rechargeable by
|
||||||
* the specified reference account
|
* the specified reference account
|
||||||
*/
|
*/
|
||||||
Account(Quota_guard<UNIT> "a_guard, Session_label const &label,
|
Account(Guard "a_guard, Session_label const &label, Account &ref_account)
|
||||||
Account &ref_account)
|
|
||||||
:
|
:
|
||||||
_quota_guard(quota_guard), _label(label),
|
_quota_guard(quota_guard), _label(label),
|
||||||
_initial_limit(_quota_guard.limit())
|
_initial_limit(_quota_guard.limit())
|
||||||
@ -108,7 +108,7 @@ class Core::Account
|
|||||||
/**
|
/**
|
||||||
* Constructor used for creating the initial account
|
* Constructor used for creating the initial account
|
||||||
*/
|
*/
|
||||||
Account(Quota_guard<UNIT> "a_guard, Session_label const &label)
|
Account(Guard "a_guard, Session_label const &label)
|
||||||
: _quota_guard(quota_guard), _label(label), _initial_limit(UNIT{0}) { }
|
: _quota_guard(quota_guard), _label(label), _initial_limit(UNIT{0}) { }
|
||||||
|
|
||||||
~Account()
|
~Account()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user