[PATCH 01/36] util: virresctrl: convert classes to GObject

Jonathon Jongsma jjongsma at redhat.com
Tue Apr 7 20:33:06 UTC 2020


A couple minor notes below

On Fri, 2020-04-03 at 17:15 +0200, Rafael Fonseca wrote:
> Signed-off-by: Rafael Fonseca <r4f4rfs at gmail.com>
> ---
>  src/conf/capabilities.c |   3 +-
>  src/conf/domain_conf.c  |  21 +++---
>  src/util/virresctrl.c   | 137 ++++++++++++++++++++++--------------
> ----
>  src/util/virresctrl.h   |  15 +++--
>  tests/virresctrltest.c  |   3 +-
>  5 files changed, 97 insertions(+), 82 deletions(-)
> 
> diff --git a/src/conf/capabilities.c b/src/conf/capabilities.c
> index 99b69aebb5..2c91461a54 100644
> 

[SNIP]

> @@ -419,38 +423,62 @@ virResctrlAllocDispose(void *obj)
>      VIR_FREE(alloc->id);
>      VIR_FREE(alloc->path);
>      VIR_FREE(alloc->levels);
> +
> +    G_OBJECT_CLASS(vir_resctrl_alloc_parent_class)->finalize(obj);
>  }
>  
>  
>  static void
> -virResctrlMonitorDispose(void *obj)
> +virResctrlMonitorFinalize(GObject *obj)
>  {
> -    virResctrlMonitorPtr monitor = obj;
> +    virResctrlMonitorPtr monitor = VIR_RESCTRL_MONITOR(obj);
>  
> -    virObjectUnref(monitor->alloc);
> +    if (monitor->alloc)
> +        g_object_unref(monitor->alloc);

In general, releasing a reference to a member GObject should be done in
the 'dispose' function rather than the 'finalize' function. In this
specific case, it probably doesn't make any real difference, but I'd
rather stick to recommended behavior. See 
https://developer.gnome.org/gobject/stable/gobject-memory.html#gobject-memory-cycles
for more details.


[SNIP]


> @@ -1884,8 +1898,8 @@ virResctrlAllocNewFromInfo(virResctrlInfoPtr
> info)
>      virBitmapFree(mask);
>      return ret;
>   error:
> -    virObjectUnref(ret);
> -    ret = NULL;
> +    if (ret)
> +        g_clear_object(&ret);

g_clear_object() does nothing if ret is NULL, so there's no need to
check for non-NULL before calling it.






More information about the libvir-list mailing list