Signed-off-by: Tim Wiederhake <twiederh@xxxxxxxxxx> --- tests/qemumonitortestutils.c | 65 ++++++++++++++++-------------------- 1 file changed, 28 insertions(+), 37 deletions(-) diff --git a/tests/qemumonitortestutils.c b/tests/qemumonitortestutils.c index ce8e6e1645..86300da68a 100644 --- a/tests/qemumonitortestutils.c +++ b/tests/qemumonitortestutils.c @@ -253,12 +253,11 @@ qemuMonitorTestIO(virNetSocket *sock, { qemuMonitorTest *test = opaque; bool err = false; + VIR_LOCK_GUARD lock = virLockGuardLock(&test->lock); - virMutexLock(&test->lock); - if (test->quit) { - virMutexUnlock(&test->lock); + if (test->quit) return; - } + if (events & VIR_EVENT_HANDLE_WRITABLE) { ssize_t ret; if ((ret = virNetSocketWrite(sock, @@ -336,7 +335,6 @@ qemuMonitorTestIO(virNetSocket *sock, virNetSocketUpdateIOCallback(sock, events); } - virMutexUnlock(&test->lock); } @@ -345,24 +343,22 @@ qemuMonitorTestWorker(void *opaque) { qemuMonitorTest *test = opaque; - virMutexLock(&test->lock); - - while (!test->quit) { - virMutexUnlock(&test->lock); + while (true) { + VIR_WITH_MUTEX_LOCK_GUARD(&test->lock) { + if (test->quit) { + test->running = false; + return; + } + } if (virEventRunDefaultImpl() < 0) { - virMutexLock(&test->lock); - test->quit = true; - break; + VIR_WITH_MUTEX_LOCK_GUARD(&test->lock) { + test->quit = true; + test->running = false; + return; + } } - - virMutexLock(&test->lock); } - - test->running = false; - - virMutexUnlock(&test->lock); - return; } @@ -383,13 +379,13 @@ qemuMonitorTestFree(qemuMonitorTest *test) if (!test) return; - virMutexLock(&test->lock); - if (test->running) { - test->quit = true; - /* HACK: Add a dummy timeout to break event loop */ - timer = virEventAddTimeout(0, qemuMonitorTestFreeTimer, NULL, NULL); + VIR_WITH_MUTEX_LOCK_GUARD(&test->lock) { + if (test->running) { + test->quit = true; + /* HACK: Add a dummy timeout to break event loop */ + timer = virEventAddTimeout(0, qemuMonitorTestFreeTimer, NULL, NULL); + } } - virMutexUnlock(&test->lock); if (test->client) { virNetSocketRemoveIOCallback(test->client); @@ -463,9 +459,9 @@ qemuMonitorTestAddHandler(qemuMonitorTest *test, item->freecb = freecb; item->opaque = opaque; - virMutexLock(&test->lock); - VIR_APPEND_ELEMENT(test->items, test->nitems, item); - virMutexUnlock(&test->lock); + VIR_WITH_MUTEX_LOCK_GUARD(&test->lock) { + VIR_APPEND_ELEMENT(test->items, test->nitems, item); + } return 0; } @@ -1072,16 +1068,11 @@ qemuMonitorCommonTestInit(qemuMonitorTest *test) NULL) < 0) return -1; - virMutexLock(&test->lock); - if (virThreadCreate(&test->thread, - true, - qemuMonitorTestWorker, - test) < 0) { - virMutexUnlock(&test->lock); - return -1; + VIR_WITH_MUTEX_LOCK_GUARD(&test->lock) { + if (virThreadCreate(&test->thread, true, qemuMonitorTestWorker, test) < 0) + return -1; + test->started = test->running = true; } - test->started = test->running = true; - virMutexUnlock(&test->lock); return 0; } -- 2.31.1