qemu-devel
[Top][All Lists]
Advanced

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

Re: [PATCH v4 2/3] module: add Error arguments to module_load_one and mo


From: Markus Armbruster
Subject: Re: [PATCH v4 2/3] module: add Error arguments to module_load_one and module_load_qom_one
Date: Thu, 22 Sep 2022 17:27:43 +0200
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/27.2 (gnu/linux)

Kevin Wolf <kwolf@redhat.com> writes:

> Am 22.09.2022 um 14:42 hat Markus Armbruster geschrieben:

[...]

>> If you have callers that need to distinguish between not found, found
>> but bad, found and good, then return three distinct values.
>> 
>> I proposed to return -1 for found but bad (error), 0 for not found (no
>> error), and 1 for loaded (no error).
>
> My intuition with this one was that "not found" is still an error case,
> but it's an error case that we need to distinguish from other error
> cases.
>
> Is this one of the rare use cases for error classes?

If I remember correctly, "not found" is not actually an error for most
callers.  If we make it one, these callers have to error_free().  Minor
annoyance, especially when you have to add an else just for that.

Even if we decide to make it an error, I would not create an error class
for it.  I like

    rc = module_load_one(..., errp);
    if (rc == -ENOENT) {
        error_free(*errp);
    } else if (rc < 0) {
        return;
    }

better than

    Error *err = NULL;

    module_load_one(..., &err);
    if (err && err->class == ERROR_CLASS_NOT_FOUND) {
        error_free(err);
    } else if (err) {
        error_propagate(errp, err);
        return;
    }

I respect your intuition.  Would it still say "error case" when the
function is called module_load_if_exists()?

Hmm, another thought... a need to distinguish error cases can be a
symptom of trying to do too much in one function.  We could split this
into "look up module" and "actually load it".




reply via email to

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