qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH v2 1/6] error: Add error_abort


From: Markus Armbruster
Subject: Re: [Qemu-devel] [PATCH v2 1/6] error: Add error_abort
Date: Fri, 06 Dec 2013 12:59:36 +0100
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/24.2 (gnu/linux)

Eric Blake <address@hidden> writes:

> On 12/05/2013 03:13 AM, Markus Armbruster wrote:
>
>>>
>>> For error_propagate, if the destination error is &error_abort, then
>>> the abort happens at propagation time.
>>>
>>> Signed-off-by: Peter Crosthwaite <address@hidden>
>>> ---
>>> changed since v1:
>>> Delayed assertions that *errp == NULL.
>> 
>> Care to explain why you want to delay these assertions?  I'm not sure I
>> get it...
>
> error_abort as a global variable is always NULL.
>
>> 
>> [...]
>>> @@ -31,7 +33,6 @@ void error_set(Error **errp, ErrorClass err_class, const 
>>> char *fmt, ...)
>>>      if (errp == NULL) {
>>>          return;
>>>      }
>>> -    assert(*errp == NULL);
>
> So *&error_abort is null and this assertion would fire, unless we delay
> the check for NULL...

Err, one of us is confused :)

When errp == &error_abort, then *errp should be null.  If it isn't, then
something got stored in error_abort, which is quite wrong.  Leaving the
assertion where it is catches that.

>>>  
>>>      err = g_malloc0(sizeof(*err));
>>>  
>>> @@ -40,6 +41,12 @@ void error_set(Error **errp, ErrorClass
>>> err_class, const char *fmt, ...)
>>>      va_end(ap);
>>>      err->err_class = err_class;
>>>  
>>> +    if (errp == &error_abort) {
>>> +        error_report("%s", error_get_pretty(err));
>>> +        abort();
>>> +    }
>>> +
>>> +    assert(*errp == NULL);
>
> ...until after the check for &error_abort.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]