[libvirt] [PATCH v2] lxcDomainShutdownFlags and lxcDomainReboot: Cleanup @flags usage

Eric Blake eblake at redhat.com
Fri Jan 10 00:20:20 UTC 2014

On 01/09/2014 05:12 PM, Eric Blake wrote:
> On 01/07/2014 08:20 AM, Michal Privoznik wrote:
>> Currently, the @flags usage is a bit unclear at first sight to say the
>> least. There's no need for such unclear code especially when we can
>> borrow the working code from qemuDomainShutdownFlags().

Working, but awkward to read.  I think the qemu code also could benefit
from the rewrite I propose below.

>> Signed-off-by: Michal Privoznik <mprivozn at redhat.com>
>> ---

>> +    if (signalRequested || rc == 0) {
> On the left side of ||, the condition is true for A, C, and D - which is
> wrong if initctl succeeded [ouch].  On the right side of the ||, the
> condition is always true for C, as well as sometimes true for A and D
> (depending on whether initctl succeeded).
> Simplifying this to 'if (rc == 0)' would fix the broken logic.

But would still be hard to read.

> Still broken; needs a v3

May I suggest this layout:

    initctlRequested = !flags || flags & VIR_DOMAIN_SHUTDOWN_INITCTL;
    signalRequested = !flags || flags & VIR_DOMAIN_SHUTDOWN_SIGNAL;

    if (initctlRequested) {
        rc = attempt;
        if (rc < 0)
            goto error;
        if (rc > 0)
            goto success;
        // didn't work, fall through to next attempt
    if (signalRequested) {
        rc = attempt;
        if (rc < 0)
            goto error;
        if (rc > 0)
            goto success;
        // didn't work, fall through to next attempt
    // since we got here, nothing requested worked, so
    goto error;

and quit mentioning signalRequested inside the initctlRequested block,
as well as quit trying to use || on the conditions of whether to attempt
a signal.  Using a 'goto success' at the point where we know it worked,
instead of trying to write magic conditions to avoid duplicate work, is
easier to read.

Eric Blake   eblake redhat com    +1-919-301-3266
Libvirt virtualization library http://libvirt.org

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 604 bytes
Desc: OpenPGP digital signature
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20140109/73f295af/attachment-0001.sig>

More information about the libvir-list mailing list