Jim Meyering wrote:
Eric Blake wrote:
> On 05/17/2010 11:22 AM, Jim Meyering wrote:
>> This addresses another coverity-spotted "flaw".
>> However, since "cgroup" is never NULL after that initial "if"
stmt,
>> the only penalty is that the useless cleanup test would make a reviewer
>> try to figure out how cgroup could be NULL there.
>
> ACK.
Thanks.
>> cleanup:
>> - if (cgroup)
>> - virCgroupFree(&cgroup);
>> + virCgroupFree(&cgroup);
>
> Is this something that the useless-if-before-free test could have
> caught, rather than waiting for coverity?
Very good idea.
Here's a patch to do that.
With this, "make sc_avoid_if_before_free" (part of make syntax-check)
will now prevent any new useless checks.
The above was the sole offender.
Actually, this is just the tip of the iceberg.
A couple minutes work have shown that there are many more:
Running this shows there are potentially at least 100
candidate functions:
aid free|grep '^vi'
Looking at the first few on the list, I've found that most are
indeed free-like:
N virBufferFreeAndReset
y virCPUDefFree
Y virCapabilitiesFree
y virCapabilitiesFreeGuest
y virCapabilitiesFreeGuestDomain
y virCapabilitiesFreeGuestFeature
y virCapabilitiesFreeGuestMachine
y virCapabilitiesFreeHostNUMACell
y virCapabilitiesFreeMachines
N virCapabilitiesFreeNUMAInfo (should probably fix)
y virCgroupFree
N virConfFree (diagnoses the "error")
y virConfFreeList
y virConfFreeValue
So far, most of the exceptions can be "fixed"
to also be free-like.
Using those few additions uncovered these:
src/conf/storage_conf.c: if (pool->newDef)
virStoragePoolDefFree(pool->newDef)
src/security/virt-aa-helper.c: if (ctl->caps)
virCapabilitiesFree(ctl->caps)
src/util/conf.c: if (cur->value) {
virConfFreeValue(cur->value);
}