[libvirt PATCH 03/10] qemuMonitorGetAllBlockStatsInfo: Assign hash table only on success

Daniel P. Berrangé berrange at redhat.com
Mon Jul 5 15:47:03 UTC 2021


On Mon, Jul 05, 2021 at 05:36:42PM +0200, Tim Wiederhake wrote:
> `virHashNew` cannot return NULL, the check is not needed.
> 
> Signed-off-by: Tim Wiederhake <twiederh at redhat.com>
> ---
>  src/qemu/qemu_monitor.c | 12 ++++++------
>  1 file changed, 6 insertions(+), 6 deletions(-)
> 
> diff --git a/src/qemu/qemu_monitor.c b/src/qemu/qemu_monitor.c
> index 19fcc5658b..86aabc98c3 100644
> --- a/src/qemu/qemu_monitor.c
> +++ b/src/qemu/qemu_monitor.c
> @@ -2155,23 +2155,23 @@ qemuMonitorGetAllBlockStatsInfo(qemuMonitor *mon,
>                                  bool backingChain)
>  {
>      int ret;
> +    GHashTable *stats = virHashNew(g_free);
> +
>      VIR_DEBUG("ret_stats=%p, backing=%d", ret_stats, backingChain);
>  
>      QEMU_CHECK_MONITOR(mon);

This macro expands with 'return -1', so this change causes a memory
leak of 'stats'.  This obscurity is why i don't like macros containing
hidden control flow.

>  
> -    if (!(*ret_stats = virHashNew(g_free)))
> -        goto error;
> -
> -    ret = qemuMonitorJSONGetAllBlockStatsInfo(mon, *ret_stats, backingChain);
> +    *ret_stats = NULL;
> +    ret = qemuMonitorJSONGetAllBlockStatsInfo(mon, stats, backingChain);
>  
>      if (ret < 0)
>          goto error;
>  
> +    *ret_stats = stats;
>      return ret;
>  
>   error:
> -    virHashFree(*ret_stats);
> -    *ret_stats = NULL;
> +    virHashFree(stats);
>      return -1;
>  }
>  
> -- 
> 2.31.1
> 

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