mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-03 15:53:54 -06:00
migration: Improve migration thread error handling
We now report errors also when we finish migration, not only on info migrate. We plan to use this error from several places, and we want the first error to happen to win, so we add an mutex to order it. Signed-off-by: Juan Quintela <quintela@redhat.com> Reviewed-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
This commit is contained in:
parent
40a5532f82
commit
87db1a7d89
3 changed files with 22 additions and 5 deletions
|
@ -1084,19 +1084,30 @@ static void migrate_fd_cleanup(void *opaque)
|
|||
MIGRATION_STATUS_CANCELLED);
|
||||
}
|
||||
|
||||
if (s->error) {
|
||||
/* It is used on info migrate. We can't free it */
|
||||
error_report_err(error_copy(s->error));
|
||||
}
|
||||
notifier_list_notify(&migration_state_notifiers, s);
|
||||
block_cleanup_parameters(s);
|
||||
}
|
||||
|
||||
void migrate_set_error(MigrationState *s, const Error *error)
|
||||
{
|
||||
qemu_mutex_lock(&s->error_mutex);
|
||||
if (!s->error) {
|
||||
s->error = error_copy(error);
|
||||
}
|
||||
qemu_mutex_unlock(&s->error_mutex);
|
||||
}
|
||||
|
||||
void migrate_fd_error(MigrationState *s, const Error *error)
|
||||
{
|
||||
trace_migrate_fd_error(error_get_pretty(error));
|
||||
assert(s->to_dst_file == NULL);
|
||||
migrate_set_state(&s->state, MIGRATION_STATUS_SETUP,
|
||||
MIGRATION_STATUS_FAILED);
|
||||
if (!s->error) {
|
||||
s->error = error_copy(error);
|
||||
}
|
||||
migrate_set_error(s, error);
|
||||
notifier_list_notify(&migration_state_notifiers, s);
|
||||
block_cleanup_parameters(s);
|
||||
}
|
||||
|
@ -2427,6 +2438,7 @@ static void migration_instance_finalize(Object *obj)
|
|||
MigrationState *ms = MIGRATION_OBJ(obj);
|
||||
MigrationParameters *params = &ms->parameters;
|
||||
|
||||
qemu_mutex_destroy(&ms->error_mutex);
|
||||
g_free(params->tls_hostname);
|
||||
g_free(params->tls_creds);
|
||||
qemu_sem_destroy(&ms->pause_sem);
|
||||
|
@ -2441,6 +2453,7 @@ static void migration_instance_init(Object *obj)
|
|||
ms->xbzrle_cache_size = DEFAULT_MIGRATE_CACHE_SIZE;
|
||||
ms->mbps = -1;
|
||||
qemu_sem_init(&ms->pause_sem, 0);
|
||||
qemu_mutex_init(&ms->error_mutex);
|
||||
|
||||
params->tls_hostname = g_strdup("");
|
||||
params->tls_creds = g_strdup("");
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue