提交 e866e302 编写于 作者: D Daniel P. Berrange

Fixed couple of memory leaks wrt to virXXXDestroy APIs, and clarify docs to match reality

上级 922fbeb8
Wed May 21 16:24:29 EST 2008 Daniel P. Berrange <berrange@redhat.com>
Fix up misc memory leaks / incorrect docs (Cole Robinson)
* qemud/remote.c: Free the virDomainPtr object in the
virDomainDestroy handler to avoid leak
* src/hash.c: Added more ref count debug
* src/libvirt.c: Clarified docs on virXXXDestroy to
match reality
* src/remote_internal.c: Free virDomain/Network objects
after dispatching RPC error
* src/virsh.c: Added some more virDomainFree calls
Wed May 21 15:42:29 EST 2008 Daniel P. Berrange <berrange@redhat.com> Wed May 21 15:42:29 EST 2008 Daniel P. Berrange <berrange@redhat.com>
* python/generator.py: Don't free the underlying virDomainPtr * python/generator.py: Don't free the underlying virDomainPtr
......
...@@ -940,9 +940,11 @@ remoteDispatchDomainDestroy (struct qemud_server *server ATTRIBUTE_UNUSED, ...@@ -940,9 +940,11 @@ remoteDispatchDomainDestroy (struct qemud_server *server ATTRIBUTE_UNUSED,
return -2; return -2;
} }
if (virDomainDestroy (dom) == -1) if (virDomainDestroy (dom) == -1) {
virDomainFree(dom);
return -1; return -1;
/* No need to free dom - destroy does it for us */ }
virDomainFree(dom);
return 0; return 0;
} }
......
...@@ -842,6 +842,9 @@ __virGetDomain(virConnectPtr conn, const char *name, const unsigned char *uuid) ...@@ -842,6 +842,9 @@ __virGetDomain(virConnectPtr conn, const char *name, const unsigned char *uuid)
goto error; goto error;
} }
conn->refs++; conn->refs++;
DEBUG("New hash entry %p", ret);
} else {
DEBUG("Existing hash entry %p: refs now %d", ret, ret->refs+1);
} }
ret->refs++; ret->refs++;
pthread_mutex_unlock(&conn->lock); pthread_mutex_unlock(&conn->lock);
......
...@@ -1390,10 +1390,9 @@ virDomainLookupByName(virConnectPtr conn, const char *name) ...@@ -1390,10 +1390,9 @@ virDomainLookupByName(virConnectPtr conn, const char *name)
* @domain: a domain object * @domain: a domain object
* *
* Destroy the domain object. The running instance is shutdown if not down * Destroy the domain object. The running instance is shutdown if not down
* already and all resources used by it are given back to the hypervisor. * already and all resources used by it are given back to the hypervisor. This
* The data structure is freed and should not be used thereafter if the * does not free the associated virDomainPtr object.
* call does not return an error. * This function may require privileged access
* This function may requires privileged access
* *
* Returns 0 in case of success and -1 in case of failure. * Returns 0 in case of success and -1 in case of failure.
*/ */
...@@ -3502,10 +3501,9 @@ virNetworkCreate(virNetworkPtr network) ...@@ -3502,10 +3501,9 @@ virNetworkCreate(virNetworkPtr network)
* @network: a network object * @network: a network object
* *
* Destroy the network object. The running instance is shutdown if not down * Destroy the network object. The running instance is shutdown if not down
* already and all resources used by it are given back to the hypervisor. * already and all resources used by it are given back to the hypervisor. This
* The data structure is freed and should not be used thereafter if the * does not free the associated virNetworkPtr object.
* call does not return an error. * This function may require privileged access
* This function may requires privileged access
* *
* Returns 0 in case of success and -1 in case of failure. * Returns 0 in case of success and -1 in case of failure.
*/ */
......
...@@ -4606,6 +4606,10 @@ server_error (virConnectPtr conn, remote_error *err) ...@@ -4606,6 +4606,10 @@ server_error (virConnectPtr conn, remote_error *err)
err->str3 ? *err->str3 : NULL, err->str3 ? *err->str3 : NULL,
err->int1, err->int2, err->int1, err->int2,
"%s", err->message ? *err->message : NULL); "%s", err->message ? *err->message : NULL);
if (dom)
virDomainFree(dom);
if (net)
virNetworkFree(net);
} }
/* get_nonnull_domain and get_nonnull_network turn an on-wire /* get_nonnull_domain and get_nonnull_network turn an on-wire
......
...@@ -1468,9 +1468,9 @@ cmdDestroy(vshControl * ctl, vshCmd * cmd) ...@@ -1468,9 +1468,9 @@ cmdDestroy(vshControl * ctl, vshCmd * cmd)
} else { } else {
vshError(ctl, FALSE, _("Failed to destroy domain %s"), name); vshError(ctl, FALSE, _("Failed to destroy domain %s"), name);
ret = FALSE; ret = FALSE;
virDomainFree(dom);
} }
virDomainFree(dom);
return ret; return ret;
} }
...@@ -2433,9 +2433,9 @@ cmdNetworkDestroy(vshControl * ctl, vshCmd * cmd) ...@@ -2433,9 +2433,9 @@ cmdNetworkDestroy(vshControl * ctl, vshCmd * cmd)
} else { } else {
vshError(ctl, FALSE, _("Failed to destroy network %s"), name); vshError(ctl, FALSE, _("Failed to destroy network %s"), name);
ret = FALSE; ret = FALSE;
virNetworkFree(network);
} }
virNetworkFree(network);
return ret; return ret;
} }
...@@ -3161,9 +3161,9 @@ cmdPoolDestroy(vshControl * ctl, vshCmd * cmd) ...@@ -3161,9 +3161,9 @@ cmdPoolDestroy(vshControl * ctl, vshCmd * cmd)
} else { } else {
vshError(ctl, FALSE, _("Failed to destroy pool %s"), name); vshError(ctl, FALSE, _("Failed to destroy pool %s"), name);
ret = FALSE; ret = FALSE;
virStoragePoolFree(pool);
} }
virStoragePoolFree(pool);
return ret; return ret;
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册