@@ -23,15 +23,17 @@
*/
#define MIGRATION_STATUS_WAIT_TIMEOUT 120
-bool got_stop;
-
-static void check_stop_event(QTestState *who)
+bool migrate_watch_for_stop(QTestState *who, const char *name,
+ QDict *event, void *opaque)
{
- QDict *event = qtest_qmp_event_ref(who, "STOP");
- if (event) {
- got_stop = true;
- qobject_unref(event);
+ bool *seen = opaque;
+
+ if (g_str_equal(name, "STOP")) {
+ *seen = true;
+ return true;
}
+
+ return false;
}
#ifndef _WIN32
@@ -48,7 +50,6 @@ QDict *wait_command_fd(QTestState *who, int fd, const char *command, ...)
va_end(ap);
resp = qtest_qmp_receive(who);
- check_stop_event(who);
g_assert(!qdict_haskey(resp, "error"));
g_assert(qdict_haskey(resp, "return"));
@@ -73,8 +74,6 @@ QDict *wait_command(QTestState *who, const char *command, ...)
resp = qtest_vqmp(who, command, ap);
va_end(ap);
- check_stop_event(who);
-
g_assert(!qdict_haskey(resp, "error"));
g_assert(qdict_haskey(resp, "return"));
@@ -15,7 +15,8 @@
#include "libqtest.h"
-extern bool got_stop;
+bool migrate_watch_for_stop(QTestState *who, const char *name,
+ QDict *event, void *opaque);
#ifndef _WIN32
G_GNUC_PRINTF(3, 4)
@@ -43,6 +43,7 @@
unsigned start_address;
unsigned end_address;
static bool uffd_feature_thread_id;
+static bool got_stop;
/*
* Dirtylimit stop working if dirty page rate error
@@ -703,6 +704,9 @@ static int test_migrate_start(QTestState **from, QTestState **to,
ignore_stderr);
if (!args->only_target) {
*from = qtest_init(cmd_source);
+ qtest_qmp_set_event_callback(*from,
+ migrate_watch_for_stop,
+ &got_stop);
}
cmd_target = g_strdup_printf("-accel kvm%s -accel tcg%s%s "