On a Monday in 2021, Daniel P. Berrangé wrote:
On Mon, Feb 01, 2021 at 11:05:15AM +0100, Peter Krempa wrote:
> On Mon, Feb 01, 2021 at 09:59:57 +0000, Daniel Berrange wrote:
> > On Mon, Feb 01, 2021 at 10:54:26AM +0100, Peter Krempa wrote:
> > > On Mon, Feb 01, 2021 at 01:27:20 -0500, Laine Stump wrote:
> > > > This patch takes on one set of examples of unnecessary use of
> > > > VIR_FREE() when g_free() is adequate - it modifies only vir*Free()
> > > > functions within the conf directory that take a single pointer and
> > > > free the object pointed to by that argument before returning. The
> > > > modification is to replace VIR_FREE() with g_free() for the object
> > > > itself *and* for all subordinate chunks of memory pointed to by that
> > > > object.
> > > >
> > > > (NB: there are other functions that VIR_FREE subordinate memory of
> > > > objects that end up being freed before return (also sometimes with
> > > > VIR_FREE); I am purposefully ignoring those to reduce scope and focus
> > > > on a sub class where the pointlessness is obvious.)
> > > >
> > > > Signed-off-by: Laine Stump <laine(a)redhat.com>
> > > > ---
> > > >
> > > > NB: After going through the experience a few days ago of needing to
> > > > more or less manually backport a patch due to a different patch
> > > > similar to this one touching the one function relevant to the desired
> > > > patch as well as many dozens of other functions (thus making it
> > > > impractical to backport that patch as a prerequisite), I contemplated
> > > > splitting this patch up all the way to 1 patch for every
> > > > function. That seemed extreme though, so I've left it as is. An
> > > > alternative, of course, is to just do nothing and leave everything as
> > > > VIR_FREE() (and I know there is sentiment in that direction, a bit
> > > > from me even :-P). I wonder though if we'll ever live up to the
goals
> > > > listed in docs/glib-adoption.txt...
> > >
> > > I reckon that there isn't much value in replacing VIR_FREE by g_free
as
> > > a separate cleanup step, unless we are about to remove VIR_FREE
> > > altoghether and open-code it in places where it's required.
> >
> > Removing entire of viralloc.h is the long term goal.
> >
> > In most methods we remove alot of VIR_FREE usage by switching to
> > g_autofree. The virXXXXFree() methods though can't use g_autofree,
> > so ultimately they are were most remaining VIR_FREEs are going to
> > be. IOW, this change is a good step towards full elimination
> > of VIR_FREE.
> >
> > > As of such I'm not in favor of such cleanup patch. There's quite
lot of
> > > churn and the technical justification is rather weak.
> >
> > The justification is to get further towards fully eliminating VIR_FREE.
>
> In such case I'd strongly prefer if we replace all remaining usage of
> VIR_FREE (even after this commit) right away to
> g_clear_pointer(&ptr, g_free), whithout stretching the pain across
> multiple spread-out refactoring steps.
>
> I don't have a problem getting rid of it, I just don't want it to be
> dragging out forever.
A bulk replacement isn't the right approach, because it will lead to
greater code churn. Much usage of VIR_FREE is better replaced by use
of g_autofree.
And dragging out the death of VIR_FREE makes it easier to search for
places that have not been converted to g_autofree yet.
Jano
What remains is better replaced by a simple g_free,
only a relatively small amount needs g_clear_pointer. Bulking replacing
everything with g_clear_pointer just means we'll need to replace it
yet again with the desired final solution. Incrementally converting
our codebase is just fine.
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 :|