From: John Ferlan Date: Mon, 4 Feb 2013 18:31:46 +0000 (-0500) Subject: qemumonitortestutils: Resolve resource leaks found by Valgrind X-Git-Tag: v1.0.3-rc1~187 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=9442d03c48974afcb4a87b227eae472421bc0d60;p=thirdparty%2Flibvirt.git qemumonitortestutils: Resolve resource leaks found by Valgrind When Valgrind runs the 'qemumonitorjsontest' it would claim that the thread created is leaked. That's because the virThreadJoin won't get called due to the 'running' flag being cleared. In order to avoid that, call virThreadJoin unconditionally at cleanup time. Also noted that the qemuMonitorTestWorker() didn't get the test mutex lock on the failure path. The incoming and outgoing buffers allocated by qemuMonitorTestIO() and qemuMonitorTestAddReponse() were never VIR_FREE()'d in qemuMonitorTestFree(). --- diff --git a/tests/qemumonitortestutils.c b/tests/qemumonitortestutils.c index 7b90c385f9..1ed42ce91b 100644 --- a/tests/qemumonitortestutils.c +++ b/tests/qemumonitortestutils.c @@ -308,6 +308,7 @@ static void qemuMonitorTestWorker(void *opaque) virMutexUnlock(&test->lock); if (virEventRunDefaultImpl() < 0) { + virMutexLock(&test->lock); test->quit = true; break; } @@ -370,12 +371,14 @@ void qemuMonitorTestFree(qemuMonitorTestPtr test) virObjectUnref(test->vm); - if (test->running) - virThreadJoin(&test->thread); + virThreadJoin(&test->thread); if (timer != -1) virEventRemoveTimeout(timer); + VIR_FREE(test->incoming); + VIR_FREE(test->outgoing); + for (i = 0 ; i < test->nitems ; i++) qemuMonitorTestItemFree(test->items[i]); VIR_FREE(test->items);