Skip to content

Commit

Permalink
migration: avoid using error_is_set and thus relying on errp != NULL
Browse files Browse the repository at this point in the history
The migration code is using errp to detect "internal" errors, this means
that it relies on errp being non-NULL.

No impact so far because our only QMP clients (the QMP marshaller and HMP)
never pass a NULL Error **.  But if we had others, this patch would make
sure that migration can work with a NULL Error **.

Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
  • Loading branch information
bonzini committed Oct 23, 2012
1 parent 1fc05ad commit be7059c
Show file tree
Hide file tree
Showing 2 changed files with 12 additions and 9 deletions.
8 changes: 5 additions & 3 deletions migration-tcp.c
Expand Up @@ -71,14 +71,16 @@ static void tcp_wait_for_connect(int fd, void *opaque)
int tcp_start_outgoing_migration(MigrationState *s, const char *host_port,
Error **errp)
{
Error *local_err = NULL;

s->get_error = socket_errno;
s->write = socket_write;
s->close = tcp_close;

s->fd = inet_nonblocking_connect(host_port, tcp_wait_for_connect, s,
errp);
if (error_is_set(errp)) {
s->fd = inet_nonblocking_connect(host_port, tcp_wait_for_connect, s, &local_err);
if (local_err != NULL) {
migrate_fd_error(s);
error_propagate(errp, local_err);
return -1;
}

Expand Down
13 changes: 7 additions & 6 deletions migration.c
Expand Up @@ -483,6 +483,7 @@ void qmp_migrate(const char *uri, bool has_blk, bool blk,
bool has_inc, bool inc, bool has_detach, bool detach,
Error **errp)
{
Error *local_err = NULL;
MigrationState *s = migrate_get_current();
MigrationParams params;
const char *p;
Expand All @@ -508,7 +509,7 @@ void qmp_migrate(const char *uri, bool has_blk, bool blk,
s = migrate_init(&params);

if (strstart(uri, "tcp:", &p)) {
ret = tcp_start_outgoing_migration(s, p, errp);
ret = tcp_start_outgoing_migration(s, p, &local_err);
#if !defined(WIN32)
} else if (strstart(uri, "exec:", &p)) {
ret = exec_start_outgoing_migration(s, p);
Expand All @@ -522,11 +523,11 @@ void qmp_migrate(const char *uri, bool has_blk, bool blk,
return;
}

if (ret < 0) {
if (!error_is_set(errp)) {
DPRINTF("migration failed: %s\n", strerror(-ret));
/* FIXME: we should return meaningful errors */
error_set(errp, QERR_UNDEFINED_ERROR);
if (ret < 0 || local_err) {
if (!local_err) {
error_set_errno(errp, -ret, QERR_UNDEFINED_ERROR);
} else {
error_propagate(errp, local_err);
}
return;
}
Expand Down

0 comments on commit be7059c

Please sign in to comment.