提交 e25a32f3 编写于 作者: P Peter Krempa

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.
上级 7a791677
...@@ -331,9 +331,17 @@ static void qemuMonitorTestItemFree(qemuMonitorTestItemPtr item) ...@@ -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) void qemuMonitorTestFree(qemuMonitorTestPtr test)
{ {
size_t i; size_t i;
int timer = -1;
if (!test) if (!test)
return; return;
...@@ -341,6 +349,8 @@ void qemuMonitorTestFree(qemuMonitorTestPtr test) ...@@ -341,6 +349,8 @@ void qemuMonitorTestFree(qemuMonitorTestPtr test)
virMutexLock(&test->lock); virMutexLock(&test->lock);
if (test->running) { if (test->running) {
test->quit = true; test->quit = true;
/* HACK: Add a dummy timeout to break event loop */
timer = virEventAddTimeout(0, qemuMonitorTestFreeTimer, NULL, NULL);
} }
virMutexUnlock(&test->lock); virMutexUnlock(&test->lock);
...@@ -361,6 +371,9 @@ void qemuMonitorTestFree(qemuMonitorTestPtr test) ...@@ -361,6 +371,9 @@ void qemuMonitorTestFree(qemuMonitorTestPtr test)
if (test->running) if (test->running)
virThreadJoin(&test->thread); virThreadJoin(&test->thread);
if (timer != -1)
virEventRemoveTimeout(timer);
for (i = 0 ; i < test->nitems ; i++) for (i = 0 ; i < test->nitems ; i++)
qemuMonitorTestItemFree(test->items[i]); qemuMonitorTestItemFree(test->items[i]);
VIR_FREE(test->items); VIR_FREE(test->items);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册