[Libvirt-cim] [PATCH] (#3) Fix connection leaks

Chip Vincent cvincent at linux.vnet.ibm.com
Wed May 18 20:28:49 UTC 2011


+1. Code looks good. No leaks after 2 cimtest runs.

pushed

On 05/18/2011 12:38 PM, Sharad Mishra wrote:
> # HG changeset patch
> # User Sharad Mishra<snmishra at us.ibm.com>
> # Date 1305736505 25200
> # Node ID 846303186ec24f6d514a76224dd3ba921232ba52
> # Parent  8b428df21c360d1eaedba7157b0dfd429d2db121
> (#3) Fix connection leaks.
>
> libvirt-cim had few connection leaks which were causing it to crash.
>
> Signed-off-by: Sharad Mishra<snmishra at us.ibm.com>
>
>   #2 - cimtest showed another leak, which was fixed in this version.
>   #3 - Review comments to move and rename dom2 - virDomainPtr to  _dom.
>        Move virConnectClose during migration to migrate_do.
>
> diff -r 8b428df21c36 -r 846303186ec2 libxkutil/pool_parsing.c
> --- a/libxkutil/pool_parsing.c	Wed Apr 13 12:27:33 2011 -0700
> +++ b/libxkutil/pool_parsing.c	Wed May 18 09:35:05 2011 -0700
> @@ -453,6 +453,7 @@
>                                           CU_DEBUG("Unable to refresh storage "
>                                                    "pool");
>                           }
> +                        virStoragePoolFree(pool_ptr);
>                           ret = 1;
>                   }
>
> diff -r 8b428df21c36 -r 846303186ec2 src/Virt_AllocationCapabilities.c
> --- a/src/Virt_AllocationCapabilities.c	Wed Apr 13 12:27:33 2011 -0700
> +++ b/src/Virt_AllocationCapabilities.c	Wed May 18 09:35:05 2011 -0700
> @@ -79,7 +79,6 @@
>                                       const char *id,
>                                       struct inst_list *list)
>   {
> -        virConnectPtr conn = NULL;
>           CMPIInstance *alloc_cap_inst;
>           struct inst_list device_pool_list;
>           CMPIStatus s = {CMPI_RC_OK, NULL};
> @@ -91,15 +90,6 @@
>           if (!provider_is_responsible(broker, ref,&s))
>                   goto out;
>
> -        conn = connect_by_classname(broker, CLASSNAME(ref),&s);
> -        if (conn == NULL) {
> -                if (id)
> -                        cu_statusf(broker,&s,
> -                                   CMPI_RC_ERR_NOT_FOUND,
> -                                   "Instance not found.");
> -                goto out;
> -        }
> -
>           s = enum_pools(broker, ref, CIM_RES_TYPE_ALL,&device_pool_list);
>           if (s.rc != CMPI_RC_OK) {
>                   cu_statusf(broker,&s,
> @@ -141,7 +131,6 @@
>           }
>
>    out:
> -        virConnectClose(conn);
>           inst_list_free(&device_pool_list);
>
>           return s;
> diff -r 8b428df21c36 -r 846303186ec2 src/Virt_ComputerSystem.c
> --- a/src/Virt_ComputerSystem.c	Wed Apr 13 12:27:33 2011 -0700
> +++ b/src/Virt_ComputerSystem.c	Wed May 18 09:35:05 2011 -0700
> @@ -907,6 +907,7 @@
>   {
>           int ret;
>           virConnectPtr conn = NULL;
> +        virDomainPtr _dom = NULL;
>           char *xml = NULL;
>           CMPIStatus s = {CMPI_RC_OK, NULL};
>
> @@ -938,12 +939,12 @@
>                   goto out;
>           }
>
> -        dom = virDomainLookupByName(conn,
> +        _dom = virDomainLookupByName(conn,
>                                       virDomainGetName(dom));
>
> -        if (dom == NULL) {
> -            dom = virDomainDefineXML(conn, xml);
> -            if (dom == NULL) {
> +        if (_dom == NULL) {
> +            _dom = virDomainDefineXML(conn, xml);
> +            if (_dom == NULL) {
>                       CU_DEBUG("Failed to define domain from XML");
>                       virt_set_status(_BROKER,&s,
>                                       CMPI_RC_ERR_FAILED,
> @@ -953,10 +954,10 @@
>               }
>           }
>
> -        if (!domain_online(dom))
> +        if (!domain_online(_dom))
>               CU_DEBUG("Guest is now offline");
>
> -        ret = virDomainCreate(dom);
> +        ret = virDomainCreate(_dom);
>           if (ret != 0)
>                   virt_set_status(_BROKER,&s,
>                                   CMPI_RC_ERR_FAILED,
> @@ -965,6 +966,7 @@
>
>    out:
>           free(xml);
> +        virDomainFree(_dom);
>
>           return s;
>   }
> diff -r 8b428df21c36 -r 846303186ec2 src/Virt_ComputerSystemIndication.c
> --- a/src/Virt_ComputerSystemIndication.c	Wed Apr 13 12:27:33 2011 -0700
> +++ b/src/Virt_ComputerSystemIndication.c	Wed May 18 09:35:05 2011 -0700
> @@ -422,7 +422,6 @@
>   }
>
>   static bool async_ind(CMPIContext *context,
> -                      virConnectPtr conn,
>                         int ind_type,
>                         struct dom_xml prev_dom,
>                         char *prefix,
> @@ -557,7 +556,7 @@
>                   for (i = 0; i<  cur_count; i++) {
>                           res = dom_in_list(cur_xml[i].uuid, prev_count, prev_xml);
>                           if (!res)
> -                                async_ind(context, conn, CS_CREATED,
> +                                async_ind(context, CS_CREATED,
>                                             cur_xml[i], prefix, args);
>
>                   }
> @@ -565,14 +564,14 @@
>                   for (i = 0; i<  prev_count; i++) {
>                           res = dom_in_list(prev_xml[i].uuid, cur_count, cur_xml);
>                           if (!res)
> -                                async_ind(context, conn, CS_DELETED,
> +                                async_ind(context, CS_DELETED,
>                                             prev_xml[i], prefix, args);
>                   }
>
>                   for (i = 0; i<  prev_count; i++) {
>                           res = dom_changed(prev_xml[i], cur_xml, cur_count);
>                           if (res) {
> -                                async_ind(context, conn, CS_MODIFIED,
> +                                async_ind(context, CS_MODIFIED,
>                                             prev_xml[i], prefix, args);
>
>                           }
> diff -r 8b428df21c36 -r 846303186ec2 src/Virt_DevicePool.c
> --- a/src/Virt_DevicePool.c	Wed Apr 13 12:27:33 2011 -0700
> +++ b/src/Virt_DevicePool.c	Wed May 18 09:35:05 2011 -0700
> @@ -451,8 +451,8 @@
>
>           free(host);
>           free(dev);
> +        virDomainFree(dom);
>           virConnectClose(conn);
> -        virDomainFree(dom);
>
>           return pool;
>   }
> diff -r 8b428df21c36 -r 846303186ec2 src/Virt_VSMigrationService.c
> --- a/src/Virt_VSMigrationService.c	Wed Apr 13 12:27:33 2011 -0700
> +++ b/src/Virt_VSMigrationService.c	Wed May 18 09:35:05 2011 -0700
> @@ -1294,7 +1294,6 @@
>                                         "Completed");
>
>           raise_deleted_ind(job);
> -        virConnectClose(job->conn);
>           free(job->domain);
>           free(job->ref_cn);
>           free(job->ref_ns);
> @@ -1511,6 +1510,7 @@
>
>    out:
>           CMReturnData(results, (CMPIValue *)&retcode, CMPI_uint32);
> +        virConnectClose(job->conn);
>
>           return s;
>   }
>
> _______________________________________________
> Libvirt-cim mailing list
> Libvirt-cim at redhat.com
> https://www.redhat.com/mailman/listinfo/libvirt-cim

-- 
Chip Vincent
Open Virtualization
IBM Linux Technology Center
cvincent at linux.vnet.ibm.com




More information about the Libvirt-cim mailing list