提交 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>
* python/generator.py: Don't free the underlying virDomainPtr
......
......@@ -940,9 +940,11 @@ remoteDispatchDomainDestroy (struct qemud_server *server ATTRIBUTE_UNUSED,
return -2;
}
if (virDomainDestroy (dom) == -1)
if (virDomainDestroy (dom) == -1) {
virDomainFree(dom);
return -1;
/* No need to free dom - destroy does it for us */
}
virDomainFree(dom);
return 0;
}
......
......@@ -842,6 +842,9 @@ __virGetDomain(virConnectPtr conn, const char *name, const unsigned char *uuid)
goto error;
}
conn->refs++;
DEBUG("New hash entry %p", ret);
} else {
DEBUG("Existing hash entry %p: refs now %d", ret, ret->refs+1);
}
ret->refs++;
pthread_mutex_unlock(&conn->lock);
......
......@@ -1390,10 +1390,9 @@ virDomainLookupByName(virConnectPtr conn, const char *name)
* @domain: a domain object
*
* 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.
* The data structure is freed and should not be used thereafter if the
* call does not return an error.
* This function may requires privileged access
* already and all resources used by it are given back to the hypervisor. This
* does not free the associated virDomainPtr object.
* This function may require privileged access
*
* Returns 0 in case of success and -1 in case of failure.
*/
......@@ -3502,10 +3501,9 @@ virNetworkCreate(virNetworkPtr network)
* @network: a network object
*
* 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.
* The data structure is freed and should not be used thereafter if the
* call does not return an error.
* This function may requires privileged access
* already and all resources used by it are given back to the hypervisor. This
* does not free the associated virNetworkPtr object.
* This function may require privileged access
*
* Returns 0 in case of success and -1 in case of failure.
*/
......
......@@ -4606,6 +4606,10 @@ server_error (virConnectPtr conn, remote_error *err)
err->str3 ? *err->str3 : NULL,
err->int1, err->int2,
"%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
......
......@@ -1468,9 +1468,9 @@ cmdDestroy(vshControl * ctl, vshCmd * cmd)
} else {
vshError(ctl, FALSE, _("Failed to destroy domain %s"), name);
ret = FALSE;
virDomainFree(dom);
}
virDomainFree(dom);
return ret;
}
......@@ -2433,9 +2433,9 @@ cmdNetworkDestroy(vshControl * ctl, vshCmd * cmd)
} else {
vshError(ctl, FALSE, _("Failed to destroy network %s"), name);
ret = FALSE;
virNetworkFree(network);
}
virNetworkFree(network);
return ret;
}
......@@ -3161,9 +3161,9 @@ cmdPoolDestroy(vshControl * ctl, vshCmd * cmd)
} else {
vshError(ctl, FALSE, _("Failed to destroy pool %s"), name);
ret = FALSE;
virStoragePoolFree(pool);
}
virStoragePoolFree(pool);
return ret;
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册