[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [bug-myserver] [PROPOSAL] Exception management scheme
From: |
Giuseppe Scrivano |
Subject: |
Re: [bug-myserver] [PROPOSAL] Exception management scheme |
Date: |
Sun, 28 Mar 2010 01:13:53 +0100 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/23.1.93 (gnu/linux) |
Hello Lisa,
As we already discussed privately, it looks like a good proposal and I
agree on everything.
Does anyone have comments?
Cheers,
Giuseppe
Lisa Vitolo <address@hidden> writes:
> Hi,
> I've just taken the task #8646 ("Define an exceptions set") and I want to
> propose and eventually discuss a generic scheme.
>
> There will be an abstract super class (an interface), let's call it
> MyServerException, with some virtual methods
> definitions. This class will be extended by the exception classes, which will
> represent the different errno values.
> I was thinking also of making some categories, abstract classes in the middle
> between the superclass and the single
> exceptions. They can be useful if a developer wants to catch a whole bunch of
> exceptions regarding the same "area". I think
> of: MemoryExceptions (errors like ENOMEM, ENOSPC), SocketExceptions (almost
> every error regarding the socket and connection
> management) and FileExceptions.
> Little note: some exceptions will need to extend bad_alloc or other
> exceptions from the std library to avoid conflicts (for
> example during a dynamic allocation when bad_alloc can be thrown).
>
> Coming back to the exception, the structure should look like
> class Exception : public Category (or MyServerException)
> {
> int priority; /* this value describes the level of priority of the
> exception. It cannot be modified and can be useful to
> the developer for deciding the next action. */
>
> public:
> Exception()
> {
> sets right priority
> }
> int getPriority()
> {
> return priority;
> }
> virtual const char* what() const throw() /* this definition is the classic
> one! */
> {
> return "Error message";
> }
> char **getBacktrace()
> {
> return the backtrace obtained from the glib backtrace_symbols function.
> (http://www.gnu.org/software/libtool/manual/
> libc/Backtraces.html)
> }
> };
>
> Eventually, we can wrap this entire system in a macro or function CHECK_ERROR
> that takes the return value of a function and
> throws the appropriate exception if necessary.
>
> Usage example:
> try
> {
> CHECK_ERROR(bind(...));
> } catch ...
>
> Good night,
> Lisa
>
> --
> "The truth can be out there, but lies are inside our heads" -- Terry Pratchett
Re: [bug-myserver] [PROPOSAL] Exception management scheme, Daniele, 2010/03/28