summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPavel Dovgalyuk2018-09-12 10:18:59 +0200
committerPaolo Bonzini2018-10-02 19:08:51 +0200
commitd873fe03766481b72549ff15ee647c086a98c12f (patch)
treec9301fc63c8d3024394102d9a985eaffae7af6a1
parentreplay: wake up vCPU when replaying (diff)
downloadqemu-d873fe03766481b72549ff15ee647c086a98c12f.tar.gz
qemu-d873fe03766481b72549ff15ee647c086a98c12f.tar.xz
qemu-d873fe03766481b72549ff15ee647c086a98c12f.zip
replay: flush events when exiting
This patch adds events processing when emulation finishes instead of just cleaning the queue. Now the bdrv coroutines will be in consistent state when emulator closes. It allows correct polling of the block layer at exit. Signed-off-by: Pavel Dovgalyuk <Pavel.Dovgaluk@ispras.ru> Message-Id: <20180912081859.3228.79735.stgit@pasha-VirtualBox> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
-rw-r--r--replay/replay-events.c14
-rw-r--r--replay/replay-internal.h2
2 files changed, 1 insertions, 15 deletions
diff --git a/replay/replay-events.c b/replay/replay-events.c
index 707de3867b..0964a82838 100644
--- a/replay/replay-events.c
+++ b/replay/replay-events.c
@@ -94,18 +94,6 @@ void replay_disable_events(void)
}
}
-void replay_clear_events(void)
-{
- g_assert(replay_mutex_locked());
-
- while (!QTAILQ_EMPTY(&events_list)) {
- Event *event = QTAILQ_FIRST(&events_list);
- QTAILQ_REMOVE(&events_list, event, events);
-
- g_free(event);
- }
-}
-
/*! Adds specified async event to the queue */
void replay_add_event(ReplayAsyncEventKind event_kind,
void *opaque,
@@ -308,7 +296,7 @@ void replay_init_events(void)
void replay_finish_events(void)
{
events_enabled = false;
- replay_clear_events();
+ replay_flush_events();
}
bool replay_events_enabled(void)
diff --git a/replay/replay-internal.h b/replay/replay-internal.h
index ac4b27b674..9b0fd916a3 100644
--- a/replay/replay-internal.h
+++ b/replay/replay-internal.h
@@ -142,8 +142,6 @@ void replay_init_events(void);
void replay_finish_events(void);
/*! Flushes events queue */
void replay_flush_events(void);
-/*! Clears events list before loading new VM state */
-void replay_clear_events(void);
/*! Returns true if there are any unsaved events in the queue */
bool replay_has_events(void);
/*! Saves events from queue into the file */