[PATCH 11/25] network: use g_free() in place of remaining VIR_FREE()

Daniel P. Berrangé berrange at redhat.com
Thu Jun 25 15:12:48 UTC 2020


On Thu, Jun 25, 2020 at 11:01:48AM -0400, Laine Stump wrote:
> On 6/25/20 3:55 AM, Peter Krempa wrote:
> > On Wed, Jun 24, 2020 at 23:34:00 -0400, Laine Stump wrote:
> > > Signed-off-by: Laine Stump <laine at redhat.com>
> > > ---
> > >   src/network/bridge_driver.c | 59 +++++++++++++++++++++----------------
> > >   1 file changed, 33 insertions(+), 26 deletions(-)
> > > 
> > > diff --git a/src/network/bridge_driver.c b/src/network/bridge_driver.c
> > > index 668aa9ca88..a1b2f5b6c7 100644
> > > --- a/src/network/bridge_driver.c
> > > +++ b/src/network/bridge_driver.c
> > [...]
> > 
> > > @@ -706,7 +706,8 @@ networkStateInitialize(bool privileged,
> > >       network_driver->lockFD = -1;
> > >       if (virMutexInit(&network_driver->lock) < 0) {
> > > -        VIR_FREE(network_driver);
> > > +        g_free(network_driver);
> > > +        network_driver = NULL;
> > >           goto error;
> > In general I'm agains senseless replacement of VIR_FREE for g_free.
> > There is IMO no value to do so. VIR_FREE is now implemented via
> > g_clear_pointer(&ptr, g_free) so g_free is actually used.
> > 
> > Mass replacements are also substrate for adding bugs and need to be
> > approached carefully, so doing this en-mass might lead to others
> > attempting the same with possibly less care.


> > In general, mass replacements should be done only to
> > 
> > g_clear_pointer(&ptr, g_free)
> > 
> > and I'm not sure it's worth it.
> > 
> 
> There's no getting around it - that looks ugly. And who wants to replace
> 5506 occurences of one simple-looking thing with something else that's
> functionally equivalent but more painful to look at?
> 
> 
> I would vote for just documenting that, for safety and consistency reasons,
> VIR_FREE() should always be used instead of g_free(), and eliminating all
> direct use of g_free() (along with the aforementioned syntax check). (BTW, I
> had assumed there had been more changes to g_free(), but when I looked at my
> current tree just now, there were only 228 occurences, including the changes
> in this patch)

The point in getting rid of VIR_FREE is so that we reduce the libvirt
specific wrappers in favour of standard APIs.

A large portion of the VIR_FREE's will be eliminated by g_autoptr.

Another large set of them are used in the virFooStructFree() methods.
Those can all be converted to g_free safely, as all the methods do
is free stuff.

Most VIR_FREEs that occur at the exit of functions can also be
safely converted to g_free, if g_autoptr  isnt applicable. Sometimes
needs a little care if you have multiple goto jumps between labels.

The big danger cases are the VIR_FREE()s that occur in the middle
of methods, especially in loop bodies. Those the ones that must
use the g_clear_pointer, and that's not very many of those, so the
ugly syntax isn't an issue.

So I see no reason to keep VIR_FREE around long term.

Regards,
Daniel
-- 
|: https://berrange.com      -o-    https://www.flickr.com/photos/dberrange :|
|: https://libvirt.org         -o-            https://fstop138.berrange.com :|
|: https://entangle-photo.org    -o-    https://www.instagram.com/dberrange :|




More information about the libvir-list mailing list