mirror of
https://github.com/xemu-project/xemu.git
synced 2025-01-31 17:23:53 +00:00
migration: respect exit status with exec:
This patch makes sure that if the exec: process exits with a non-zero return status, we treat the migration as failed. This fixes https://bugs.launchpad.net/qemu/+bug/391879 Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
This commit is contained in:
parent
4309a79bff
commit
41ef56e611
@ -43,13 +43,21 @@ static int file_write(FdMigrationState *s, const void * buf, size_t size)
|
||||
|
||||
static int exec_close(FdMigrationState *s)
|
||||
{
|
||||
int ret = 0;
|
||||
DPRINTF("exec_close\n");
|
||||
if (s->opaque) {
|
||||
qemu_fclose(s->opaque);
|
||||
ret = qemu_fclose(s->opaque);
|
||||
s->opaque = NULL;
|
||||
s->fd = -1;
|
||||
if (ret != -1 &&
|
||||
WIFEXITED(ret)
|
||||
&& WEXITSTATUS(ret) == 0) {
|
||||
ret = 0;
|
||||
} else {
|
||||
ret = -1;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
return ret;
|
||||
}
|
||||
|
||||
MigrationState *exec_start_outgoing_migration(Monitor *mon,
|
||||
|
17
migration.c
17
migration.c
@ -252,13 +252,17 @@ void migrate_fd_error(FdMigrationState *s)
|
||||
migrate_fd_cleanup(s);
|
||||
}
|
||||
|
||||
void migrate_fd_cleanup(FdMigrationState *s)
|
||||
int migrate_fd_cleanup(FdMigrationState *s)
|
||||
{
|
||||
int ret = 0;
|
||||
|
||||
qemu_set_fd_handler2(s->fd, NULL, NULL, NULL, NULL);
|
||||
|
||||
if (s->file) {
|
||||
DPRINTF("closing file\n");
|
||||
qemu_fclose(s->file);
|
||||
if (qemu_fclose(s->file) != 0) {
|
||||
ret = -1;
|
||||
}
|
||||
s->file = NULL;
|
||||
}
|
||||
|
||||
@ -271,6 +275,8 @@ void migrate_fd_cleanup(FdMigrationState *s)
|
||||
}
|
||||
|
||||
s->fd = -1;
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
void migrate_fd_put_notify(void *opaque)
|
||||
@ -349,7 +355,12 @@ void migrate_fd_put_ready(void *opaque)
|
||||
} else {
|
||||
state = MIG_STATE_COMPLETED;
|
||||
}
|
||||
migrate_fd_cleanup(s);
|
||||
if (migrate_fd_cleanup(s) < 0) {
|
||||
if (old_vm_running) {
|
||||
vm_start();
|
||||
}
|
||||
state = MIG_STATE_ERROR;
|
||||
}
|
||||
s->state = state;
|
||||
}
|
||||
}
|
||||
|
@ -107,7 +107,7 @@ void migrate_fd_monitor_suspend(FdMigrationState *s, Monitor *mon);
|
||||
|
||||
void migrate_fd_error(FdMigrationState *s);
|
||||
|
||||
void migrate_fd_cleanup(FdMigrationState *s);
|
||||
int migrate_fd_cleanup(FdMigrationState *s);
|
||||
|
||||
void migrate_fd_put_notify(void *opaque);
|
||||
|
||||
|
5
savevm.c
5
savevm.c
@ -235,9 +235,10 @@ static int stdio_get_buffer(void *opaque, uint8_t *buf, int64_t pos, int size)
|
||||
static int stdio_pclose(void *opaque)
|
||||
{
|
||||
QEMUFileStdio *s = opaque;
|
||||
pclose(s->stdio_file);
|
||||
int ret;
|
||||
ret = pclose(s->stdio_file);
|
||||
qemu_free(s);
|
||||
return 0;
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int stdio_fclose(void *opaque)
|
||||
|
Loading…
x
Reference in New Issue
Block a user