forked from pool/libvirt
43 lines
1.6 KiB
Diff
43 lines
1.6 KiB
Diff
|
commit 67c56f6e65b9cd2681ef1bc61d8b51cbc543fa42
|
||
|
Author: Jim Fehlig <jfehlig@suse.com>
|
||
|
Date: Thu May 31 15:41:37 2018 -0600
|
||
|
|
||
|
libxl: fix leaking logfile fds
|
||
|
|
||
|
Per-domain log files were introduced in commit a30b08b7179. The FILE
|
||
|
objects associated with these log files are stored in a hash table
|
||
|
using domid as a key. When a domain is shutdown, destroyed, or
|
||
|
otherwise powered-off, the FILE object is removed from the hash table,
|
||
|
where the free function will close the FILE.
|
||
|
|
||
|
Unfortunately the call to remove the FILE from the hash table occurs
|
||
|
after setting domid=-1 in the libxlDomainCleanup() function. The
|
||
|
object is never removed from the hash table, the free function is
|
||
|
never called, and the underlying fd is leaked. Fix by removing the
|
||
|
FILE object from the hash table before setting domid=-1.
|
||
|
|
||
|
Signed-off-by: Jim Fehlig <jfehlig@suse.com>
|
||
|
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||
|
|
||
|
diff --git a/src/libxl/libxl_domain.c b/src/libxl/libxl_domain.c
|
||
|
index d4859d6707..d12b1b1b4b 100644
|
||
|
--- a/src/libxl/libxl_domain.c
|
||
|
+++ b/src/libxl/libxl_domain.c
|
||
|
@@ -769,6 +769,7 @@ libxlDomainCleanup(libxlDriverPrivatePtr driver,
|
||
|
VIR_WARN("Unable to release lease on %s", vm->def->name);
|
||
|
VIR_DEBUG("Preserving lock state '%s'", NULLSTR(priv->lockState));
|
||
|
|
||
|
+ libxlLoggerCloseFile(cfg->logger, vm->def->id);
|
||
|
vm->def->id = -1;
|
||
|
|
||
|
if (priv->deathW) {
|
||
|
@@ -822,8 +823,6 @@ libxlDomainCleanup(libxlDriverPrivatePtr driver,
|
||
|
VIR_FREE(xml);
|
||
|
}
|
||
|
|
||
|
- libxlLoggerCloseFile(cfg->logger, vm->def->id);
|
||
|
-
|
||
|
virDomainObjRemoveTransientDef(vm);
|
||
|
virObjectUnref(cfg);
|
||
|
}
|