On Tue, Nov 30, 2021 at 15:14:14 +0000, Daniel P. Berrangé wrote:
On Tue, Nov 30, 2021 at 03:32:05PM +0100, Peter Krempa wrote:
> Use 'g_clear_pointer(&ptr, g_hash_table_unref)' instead.
>
> In few instances it allows us to also remove explicit clearing of
> pointers.
>
> Signed-off-by: Peter Krempa <pkrempa(a)redhat.com>
> ---
> src/conf/domain_addr.c | 2 +-
> src/conf/domain_conf.c | 2 +-
> src/conf/nwfilter_conf.c | 2 +-
> src/conf/nwfilter_ipaddrmap.c | 3 +--
> src/conf/virchrdev.c | 2 +-
> src/conf/virdomainmomentobjlist.c | 2 +-
> src/conf/virdomainobjlist.c | 4 ++--
> src/conf/virinterfaceobj.c | 2 +-
> src/conf/virnetworkobj.c | 4 ++--
> src/conf/virnodedeviceobj.c | 2 +-
> src/conf/virnwfilterbindingdef.c | 2 +-
> src/conf/virnwfilterbindingobjlist.c | 2 +-
> src/conf/virsecretobj.c | 2 +-
> src/conf/virstorageobj.c | 10 +++++-----
> src/hyperv/hyperv_wmi.c | 2 +-
> src/hypervisor/virclosecallbacks.c | 2 +-
> src/libxl/libxl_logger.c | 2 +-
> src/locking/lock_daemon.c | 2 +-
> src/nwfilter/nwfilter_dhcpsnoop.c | 6 +++---
> src/nwfilter/nwfilter_gentech_driver.c | 2 +-
> src/nwfilter/nwfilter_learnipaddr.c | 7 ++-----
> src/qemu/qemu_domain.c | 2 +-
> src/qemu/qemu_driver.c | 2 +-
> src/rpc/virnetdaemon.c | 2 +-
> src/security/security_selinux.c | 6 +++---
> src/util/virfilecache.c | 2 +-
> src/util/virhash.c | 2 +-
> src/util/virlockspace.c | 2 +-
> src/util/virmacmap.c | 2 +-
> src/util/virsystemd.c | 2 +-
> tests/nwfilterxml2firewalltest.c | 2 +-
> tests/qemusecuritymock.c | 7 +++----
> 32 files changed, 45 insertions(+), 50 deletions(-)
>
> diff --git a/src/conf/domain_addr.c b/src/conf/domain_addr.c
> index a06721c35d..49745ba881 100644
> --- a/src/conf/domain_addr.c
> +++ b/src/conf/domain_addr.c
> @@ -1377,7 +1377,7 @@ void virDomainCCWAddressSetFree(virDomainCCWAddressSet
*addrs)
> if (!addrs)
> return;
>
> - virHashFree(addrs->defined);
> + g_clear_pointer(&addrs->defined, g_hash_table_unref);
This is in a Free() method, so we should just be calling
g_hash_table_unref directly. Likewise for all the other
g_hash_table_unref requires a valid GHashTable pointer to be passed.
g_clear_pointer ensures that we don't call it while the freed table
would be NULL.
Most Free* methods are also used on cleanup paths when the insides of
the struct may still be NULL and IMO it's not worth analyzing the code
and neither converting to:
if (htptr)
g_hash_table_unref(htptr);
for the instances where setting the variable to NULL is pointless.