qemumonitorjsontest creates a temporary directory to hold the socket
that is simulating the monitor socket. The directory containing the
socket wasn't disposed properly at the end of the test leaving garbage
in the temporary folder.
---
tests/qemumonitortestutils.c | 60 ++++++++++++++++++++++++--------------------
1 file changed, 33 insertions(+), 27 deletions(-)
diff --git a/tests/qemumonitortestutils.c b/tests/qemumonitortestutils.c
index 7f7c855..b55d867 100644
--- a/tests/qemumonitortestutils.c
+++ b/tests/qemumonitortestutils.c
@@ -65,6 +65,8 @@ struct _qemuMonitorTest {
qemuMonitorPtr mon;
+ char *tmpdir;
+
size_t nitems;
qemuMonitorTestItemPtr *items;
@@ -378,6 +380,11 @@ void qemuMonitorTestFree(qemuMonitorTestPtr test)
qemuMonitorTestItemFree(test->items[i]);
VIR_FREE(test->items);
+ if (test->tmpdir && rmdir(test->tmpdir) < 0)
+ VIR_WARN("Failed to remove tempdir: %s", strerror(errno));
+
+ VIR_FREE(test->tmpdir);
+
virMutexDestroy(&test->lock);
VIR_FREE(test);
}
@@ -438,31 +445,11 @@ qemuMonitorTestPtr qemuMonitorTestNew(bool json, virCapsPtr caps)
{
qemuMonitorTestPtr test = NULL;
virDomainChrSourceDef src;
+ char *path = NULL;
+ char *tmpdir_template = NULL;
- char *tmpdir = NULL, *path = NULL;
- char template[] = "/tmp/libvirt_XXXXXX";
-
- tmpdir = mkdtemp(template);
- if (tmpdir == NULL) {
- virReportSystemError(errno, "%s",
- "Failed to create temporary directory");
- goto error;
- }
-
- if (virAsprintf(&path, "%s/qemumonitorjsontest.sock", tmpdir) < 0)
{
- virReportOOMError();
- goto error;
- }
-
- memset(&src, 0, sizeof(src));
- src.type = VIR_DOMAIN_CHR_TYPE_UNIX;
- src.data.nix.path = (char *)path;
- src.data.nix.listen = false;
-
- if (VIR_ALLOC(test) < 0) {
- virReportOOMError();
- return NULL;
- }
+ if (VIR_ALLOC(test) < 0)
+ goto no_memory;
if (virMutexInit(&test->lock) < 0) {
virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
@@ -471,6 +458,20 @@ qemuMonitorTestPtr qemuMonitorTestNew(bool json, virCapsPtr caps)
return NULL;
}
+ if (!(tmpdir_template = strdup("/tmp/libvirt_XXXXXX")))
+ goto no_memory;
+
+ if (!(test->tmpdir = mkdtemp(tmpdir_template))) {
+ virReportSystemError(errno, "%s",
+ "Failed to create temporary directory");
+ goto error;
+ }
+
+ tmpdir_template = NULL;
+
+ if (virAsprintf(&path, "%s/qemumonitorjsontest.sock", test->tmpdir)
< 0)
+ goto no_memory;
+
test->json = json;
if (!(test->vm = virDomainObjNew(caps)))
goto error;
@@ -482,6 +483,10 @@ qemuMonitorTestPtr qemuMonitorTestNew(bool json, virCapsPtr caps)
&test->server) < 0)
goto error;
+ memset(&src, 0, sizeof(src));
+ src.type = VIR_DOMAIN_CHR_TYPE_UNIX;
+ src.data.nix.path = (char *)path;
+ src.data.nix.listen = false;
if (virNetSocketListen(test->server, 1) < 0)
goto error;
@@ -522,13 +527,14 @@ qemuMonitorTestPtr qemuMonitorTestNew(bool json, virCapsPtr caps)
virMutexUnlock(&test->lock);
cleanup:
- if (tmpdir)
- if (rmdir(tmpdir) < 0)
- VIR_WARN("Failed to remove tempdir: %s", strerror(errno));
VIR_FREE(path);
return test;
+no_memory:
+ virReportOOMError();
+
error:
+ VIR_FREE(tmpdir_template);
qemuMonitorTestFree(test);
goto cleanup;
}
--
1.8.0
Show replies by date
On 11/12/2012 07:38 AM, Peter Krempa wrote:
qemumonitorjsontest creates a temporary directory to hold the socket
that is simulating the monitor socket. The directory containing the
socket wasn't disposed properly at the end of the test leaving garbage
in the temporary folder.
---
tests/qemumonitortestutils.c | 60 ++++++++++++++++++++++++--------------------
1 file changed, 33 insertions(+), 27 deletions(-)
ACK.
--
Eric Blake eblake(a)redhat.com +1-919-301-3266
Libvirt virtualization library
http://libvirt.org
On 11/12/12 23:27, Eric Blake wrote:
On 11/12/2012 07:38 AM, Peter Krempa wrote:
> qemumonitorjsontest creates a temporary directory to hold the socket
> that is simulating the monitor socket. The directory containing the
> socket wasn't disposed properly at the end of the test leaving garbage
> in the temporary folder.
> ---
> tests/qemumonitortestutils.c | 60 ++++++++++++++++++++++++--------------------
> 1 file changed, 33 insertions(+), 27 deletions(-)
ACK.
Pushed; Thanks. I've hit this problem massively after leaving the test
running in a loop while verifying the fix of the deadlock. My temp dir
contained nearly 160k of those temp dirs :)
Peter