diff options
Diffstat (limited to 'replay')
-rw-r--r-- | replay/replay-internal.h | 3 | ||||
-rw-r--r-- | replay/replay.c | 7 |
2 files changed, 6 insertions, 4 deletions
diff --git a/replay/replay-internal.h b/replay/replay-internal.h index ed66ed803c..3ebb19912a 100644 --- a/replay/replay-internal.h +++ b/replay/replay-internal.h @@ -22,8 +22,9 @@ enum ReplayEvents { EVENT_EXCEPTION, /* for async events */ EVENT_ASYNC, - /* for shutdown request */ + /* for shutdown requests, range allows recovery of ShutdownCause */ EVENT_SHUTDOWN, + EVENT_SHUTDOWN_LAST = EVENT_SHUTDOWN + SHUTDOWN_CAUSE__MAX, /* for character device write event */ EVENT_CHAR_WRITE, /* for character device read all event */ diff --git a/replay/replay.c b/replay/replay.c index f810628cac..bf94e81261 100644 --- a/replay/replay.c +++ b/replay/replay.c @@ -49,8 +49,9 @@ bool replay_next_event_is(int event) res = true; } switch (replay_state.data_kind) { - case EVENT_SHUTDOWN: + case EVENT_SHUTDOWN ... EVENT_SHUTDOWN_LAST: replay_finish_event(); + /* TODO - pass replay_state.data_kind - EVENT_SHUTDOWN as cause */ qemu_system_shutdown_request(); break; default: @@ -170,11 +171,11 @@ bool replay_has_interrupt(void) return res; } -void replay_shutdown_request(void) +void replay_shutdown_request(ShutdownCause cause) { if (replay_mode == REPLAY_MODE_RECORD) { replay_mutex_lock(); - replay_put_event(EVENT_SHUTDOWN); + replay_put_event(EVENT_SHUTDOWN + cause); replay_mutex_unlock(); } } |