[libvirt] [PATCH] conf: replace call to virNetworkFree() with virOjectUnref()
Michal Privoznik
mprivozn at redhat.com
Tue Nov 25 12:29:11 UTC 2014
On 25.11.2014 11:15, Laine Stump wrote:
> The function virNetworkObjListExport() in network_conf.c had a call to
> the public API virNetworkFree() which was causing a link error:
>
> CCLD libvirt_driver_vbox_network_impl.la
> ./.libs/libvirt_conf.a(libvirt_conf_la-network_conf.o): In function `virNetworkObjListExport':
> /home/laine/devel/libvirt/src/conf/network_conf.c:4496: undefined reference to `virNetworkFree'
>
> This would happen when I added
>
> #include "network_conf.h"
>
> into domain_conf.c, then attempted to call a new function from that
> file (and enum converter, similar to virNetworkForwardTypeToString())
>
> In the end, virNetworkFree() ends up just calling virObjectUnref(obj)
> anyway (after clearing all pending errors, which we probably *don't*
> want to do in the cleanup of a utility function), so this is likely
> more correct than the original code as well.
> ---
>
> A quick look showed that there may be other places where we are
> calling public APIs such as virNetworkFree and virDomainFree when we
> really don't want to be clearning out the pending error - this would
> result in the good old "an error was encountered but the cause is
> unknown" type of log messages. It may warrant an audit...
>
> src/conf/network_conf.c | 6 ++----
> 1 file changed, 2 insertions(+), 4 deletions(-)
>
> diff --git a/src/conf/network_conf.c b/src/conf/network_conf.c
> index 067334e..a249e32 100644
> --- a/src/conf/network_conf.c
> +++ b/src/conf/network_conf.c
> @@ -4463,10 +4463,8 @@ virNetworkObjListExport(virConnectPtr conn,
>
> cleanup:
> if (tmp_nets) {
> - for (i = 0; i < nnets; i++) {
> - if (tmp_nets[i])
> - virNetworkFree(tmp_nets[i]);
> - }
> + for (i = 0; i < nnets; i++)
> + virObjectUnref(tmp_nets[i]);
> }
>
> VIR_FREE(tmp_nets);
>
ACK
Michal
More information about the libvir-list
mailing list