1
0
mirror of https://gitlab.com/libvirt/libvirt.git synced 2024-12-22 17:34:18 +03:00

Fix numerous memory leaks

This commit is contained in:
Daniel P. Berrange 2007-12-01 15:45:25 +00:00
parent b4f841d92f
commit 2b3c49b6ab
6 changed files with 28 additions and 15 deletions

View File

@ -1,3 +1,12 @@
Sat Dec 1 10:42:34 EST 2007 Daniel P. Berrange <berrange@redhat.com>
* src/hash.c: reset error object when releasing connection
* src/iptables.c: don't strdup() param passed to strcmp()
* src/qemu_driver.c: free TLS directory path in driver shutdown
* src/remote_internal.c: don't strdup() params for virRaiseError
* src/virsh.c: reset global error object at shutdown. Release
connection state during abnormal shutdown
Sat Dec 1 10:22:34 EST 2007 Daniel P. Berrange <berrange@redhat.com> Sat Dec 1 10:22:34 EST 2007 Daniel P. Berrange <berrange@redhat.com>
* src/qemu_driver.c: Fix off-by-1 buffer NULL termination in * src/qemu_driver.c: Fix off-by-1 buffer NULL termination in

View File

@ -726,6 +726,7 @@ virFreeConnect(virConnectPtr conn) {
virHashFree(conn->networks, (virHashDeallocator) virNetworkFreeName); virHashFree(conn->networks, (virHashDeallocator) virNetworkFreeName);
if (conn->hashes_mux != NULL) if (conn->hashes_mux != NULL)
xmlFreeMutex(conn->hashes_mux); xmlFreeMutex(conn->hashes_mux);
virResetError(&conn->err);
free(conn); free(conn);
return(0); return(0);
} }

View File

@ -246,7 +246,7 @@ iptRulesRemove(iptRules *rules,
int i; int i;
for (i = 0; i < rules->nrules; i++) for (i = 0; i < rules->nrules; i++)
if (!strcmp(rules->rules[i].rule, strdup(rule))) if (!strcmp(rules->rules[i].rule, rule))
break; break;
if (i >= rules->nrules) if (i >= rules->nrules)

View File

@ -341,6 +341,9 @@ qemudShutdown(void) {
if (qemu_driver->networkAutostartDir) if (qemu_driver->networkAutostartDir)
free(qemu_driver->networkAutostartDir); free(qemu_driver->networkAutostartDir);
if (qemu_driver->vncTLSx509certdir)
free(qemu_driver->vncTLSx509certdir);
if (qemu_driver->brctl) if (qemu_driver->brctl)
brShutdown(qemu_driver->brctl); brShutdown(qemu_driver->brctl);
if (qemu_driver->iptables) if (qemu_driver->iptables)

View File

@ -3052,20 +3052,13 @@ server_error (virConnectPtr conn, remote_error *err)
dom = err->dom ? get_nonnull_domain (conn, *err->dom) : NULL; dom = err->dom ? get_nonnull_domain (conn, *err->dom) : NULL;
net = err->net ? get_nonnull_network (conn, *err->net) : NULL; net = err->net ? get_nonnull_network (conn, *err->net) : NULL;
/* These strings are nullable. OK to ignore the return value
* of strdup since these strings are informational.
*/
char *str1 = err->str1 ? strdup (*err->str1) : NULL;
char *str2 = err->str2 ? strdup (*err->str2) : NULL;
char *str3 = err->str3 ? strdup (*err->str3) : NULL;
char *message = err->message ? strdup (*err->message) : NULL;
__virRaiseError (conn, dom, net, __virRaiseError (conn, dom, net,
err->domain, err->code, err->level, err->domain, err->code, err->level,
str1, str2, str3, err->str1 ? *err->str1 : NULL,
err->str2 ? *err->str2 : NULL,
err->str3 ? *err->str3 : NULL,
err->int1, err->int2, err->int1, err->int2,
"%s", message); "%s", err->message ? *err->message : NULL);
} }
/* get_nonnull_domain and get_nonnull_network turn an on-wire /* get_nonnull_domain and get_nonnull_network turn an on-wire

View File

@ -4780,7 +4780,8 @@ static int
vshDeinit(vshControl * ctl) vshDeinit(vshControl * ctl)
{ {
vshCloseLogFile(ctl); vshCloseLogFile(ctl);
if (ctl->name)
free(ctl->name);
if (ctl->conn) { if (ctl->conn) {
if (virConnectClose(ctl->conn) != 0) { if (virConnectClose(ctl->conn) != 0) {
ctl->conn = NULL; /* prevent recursive call from vshError() */ ctl->conn = NULL; /* prevent recursive call from vshError() */
@ -4788,6 +4789,8 @@ vshDeinit(vshControl * ctl)
"failed to disconnect from the hypervisor"); "failed to disconnect from the hypervisor");
} }
} }
virResetLastError();
return TRUE; return TRUE;
} }
@ -4985,11 +4988,15 @@ main(int argc, char **argv)
ctl->name = strdup(defaultConn); ctl->name = strdup(defaultConn);
} }
if (!vshParseArgv(ctl, argc, argv)) if (!vshParseArgv(ctl, argc, argv)) {
vshDeinit(ctl);
exit(EXIT_FAILURE); exit(EXIT_FAILURE);
}
if (!vshInit(ctl)) if (!vshInit(ctl)) {
vshDeinit(ctl);
exit(EXIT_FAILURE); exit(EXIT_FAILURE);
}
if (!ctl->imode) { if (!ctl->imode) {
ret = vshCommandRun(ctl, ctl->cmd); ret = vshCommandRun(ctl, ctl->cmd);