----- Original Message ----- > From: "Pavel Dovgalyuk" <pavel.dovga...@ispras.ru> > To: qemu-devel@nongnu.org > Cc: pbonz...@redhat.com, jasow...@redhat.com, ag...@suse.de, > da...@gibson.dropbear.id.au > Sent: Wednesday, June 8, 2016 7:14:04 AM > Subject: [PATCH 2/3] replay: allow replay stopping and restarting > > This patch fixes bug with stopping and restarting replay > through monitor. > > Signed-off-by: Pavel Dovgalyuk <pavel.dovga...@ispras.ru> > --- > block/blkreplay.c | 18 +++++++++++++----- > cpus.c | 1 + > include/sysemu/replay.h | 2 ++ > replay/replay-internal.h | 2 -- > vl.c | 1 + > 5 files changed, 17 insertions(+), 7 deletions(-) > > diff --git a/block/blkreplay.c b/block/blkreplay.c > index 42f1813..438170c 100644 > --- a/block/blkreplay.c > +++ b/block/blkreplay.c > @@ -70,6 +70,14 @@ static void blkreplay_bh_cb(void *opaque) > g_free(req); > } > > +static uint64_t blkreplay_next_id(void) > +{ > + if (replay_events_enabled()) { > + return request_id++; > + } > + return 0; > +}
What happens if 0 is returned? I think that you want to call replay_disable_events... > bdrv_drain_all(); ... after this bdrv_drain_all. I was going to suggest using qemu_add_vm_change_state_handler in replay_start (which could have replaced the existing call to replay_enable_events), but that's not possible if you have to do your calls after bdrv_drain_all. Thanks, Paolo