mirror of https://github.com/xemu-project/xemu.git
migration: Clear error at entry of migrate_fd_connect()
For each "migrate" command, remember to clear the s->error before going on. For one reason, when there's a new error it'll be still remembered; see migrate_set_error() who only sets the error if error==NULL. Meanwhile if a failed migration completes (e.g., postcopy recovered and finished), we shouldn't dump an error when calling migrate_fd_cleanup() at last. Signed-off-by: Peter Xu <peterx@redhat.com> Message-Id: <20210708190653.252961-4-peterx@redhat.com> Reviewed-by: Dr. David Alan Gilbert <dgilbert@redhat.com> Signed-off-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
This commit is contained in:
parent
ca30f24d12
commit
ca7bd0821b
|
@ -1855,6 +1855,15 @@ void migrate_set_error(MigrationState *s, const Error *error)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void migrate_error_free(MigrationState *s)
|
||||||
|
{
|
||||||
|
QEMU_LOCK_GUARD(&s->error_mutex);
|
||||||
|
if (s->error) {
|
||||||
|
error_free(s->error);
|
||||||
|
s->error = NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void migrate_fd_error(MigrationState *s, const Error *error)
|
void migrate_fd_error(MigrationState *s, const Error *error)
|
||||||
{
|
{
|
||||||
trace_migrate_fd_error(error_get_pretty(error));
|
trace_migrate_fd_error(error_get_pretty(error));
|
||||||
|
@ -3970,6 +3979,13 @@ void migrate_fd_connect(MigrationState *s, Error *error_in)
|
||||||
int64_t rate_limit;
|
int64_t rate_limit;
|
||||||
bool resume = s->state == MIGRATION_STATUS_POSTCOPY_PAUSED;
|
bool resume = s->state == MIGRATION_STATUS_POSTCOPY_PAUSED;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* If there's a previous error, free it and prepare for another one.
|
||||||
|
* Meanwhile if migration completes successfully, there won't have an error
|
||||||
|
* dumped when calling migrate_fd_cleanup().
|
||||||
|
*/
|
||||||
|
migrate_error_free(s);
|
||||||
|
|
||||||
s->expected_downtime = s->parameters.downtime_limit;
|
s->expected_downtime = s->parameters.downtime_limit;
|
||||||
if (resume) {
|
if (resume) {
|
||||||
assert(s->cleanup_bh);
|
assert(s->cleanup_bh);
|
||||||
|
|
Loading…
Reference in New Issue