mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-01-21 20:15:17 +00:00
tests: Fix qemumonitorjsontest deadlock when the machine is under load
When doing the qemumonitorjsontest on a machine under heavy load the test tends to deadlock from time to time. This patch adds the hack to break the event loop that is used in virsh.
This commit is contained in:
parent
7a791677b0
commit
e25a32f3da
@ -331,9 +331,17 @@ static void qemuMonitorTestItemFree(qemuMonitorTestItemPtr item)
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
qemuMonitorTestFreeTimer(int timer ATTRIBUTE_UNUSED, void *opaque ATTRIBUTE_UNUSED)
|
||||
{
|
||||
/* nothing to be done here */
|
||||
}
|
||||
|
||||
|
||||
void qemuMonitorTestFree(qemuMonitorTestPtr test)
|
||||
{
|
||||
size_t i;
|
||||
int timer = -1;
|
||||
|
||||
if (!test)
|
||||
return;
|
||||
@ -341,6 +349,8 @@ void qemuMonitorTestFree(qemuMonitorTestPtr test)
|
||||
virMutexLock(&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);
|
||||
|
||||
@ -361,6 +371,9 @@ void qemuMonitorTestFree(qemuMonitorTestPtr test)
|
||||
if (test->running)
|
||||
virThreadJoin(&test->thread);
|
||||
|
||||
if (timer != -1)
|
||||
virEventRemoveTimeout(timer);
|
||||
|
||||
for (i = 0 ; i < test->nitems ; i++)
|
||||
qemuMonitorTestItemFree(test->items[i]);
|
||||
VIR_FREE(test->items);
|
||||
|
Loading…
x
Reference in New Issue
Block a user