Eric Blake wrote:
[adding Jim to cc, as author of useless-if-before-free]
On 02/17/2011 02:14 PM, Christophe Fergeau wrote:
> virHashFree follows the convention described in HACKING that
> XXXFree() functions can be called with a NULL argument.
> ---
> src/conf/domain_conf.c | 6 +---
> src/datatypes.c | 51 +++++++++++++++-------------------------------
> src/qemu/qemu_process.c | 4 +--
> 3 files changed, 20 insertions(+), 41 deletions(-)
>
> diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
> index 351daf7..e7c3409 100644
> --- a/src/conf/domain_conf.c
> +++ b/src/conf/domain_conf.c
> @@ -410,8 +410,7 @@ static void virDomainObjListDeallocator(void
> *payload, const char *name ATTRIBUT
>
> void virDomainObjListDeinit(virDomainObjListPtr doms)
> {
> - if (doms->objs)
> - virHashFree(doms->objs, virDomainObjListDeallocator);
> + virHashFree(doms->objs, virDomainObjListDeallocator);
I tried adding --name=virHashFree to the useless_free_options variable
in cfg.mk, to see if that would prevent regressions. However, it
appears that this two-argument free-like function is not picked up by
the heuristics in the useless-if-before-free script (it only works on
one-argument functions).
ACK to your patch as-is, so I pushed it. But I can't help but wonder if
we could make this easier to enforce at 'make syntax-check' time by
tweaking the perl script somehow.
Right. useless-if-before-free deliberately detects only
one-argument free-like functions.
I'm reluctant to add such a change to that script because
- there are comparatively few free-like functions with more than
one argument, so there's not much anticipated gain
- we don't know in general whether the free'd pointer arg is the
first or second, so...
- having to match against either the first or 2nd argument would
greatly complicate the already complicated regular expressions
If you're interested in pursuing it, I suggest switching tools
altogether and using spatch. That would make for a much cleaner
(albeit probably less efficient) script. It would also depend
on a less-ubiquitous tool than perl.