From: "Rao, Lei" <lei....@intel.com> When a PVM completed its SVM failover steps and begins to run in the simplex mode, QEMU would encounter a 'Segmentation fault' if the guest poweroff with the following calltrace:
Program received signal SIGSEGV, Segmentation fault. This is because primary_vm_do_failover() would call "qemu_file_shutdown (s->rp_state.from_dst_file);" and later the migration_shutdown() would do it again. So, we should set the s->rp_state.from_dst_file to NULL. Signed-off-by: Like Xu <like...@linux.intel.com> Signed-off-by: Lei Rao <lei....@intel.com> --- migration/colo.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/migration/colo.c b/migration/colo.c index 616dc00..c25e488 100644 --- a/migration/colo.c +++ b/migration/colo.c @@ -156,14 +156,15 @@ static void primary_vm_do_failover(void) /* * Wake up COLO thread which may blocked in recv() or send(), - * The s->rp_state.from_dst_file and s->to_dst_file may use the - * same fd, but we still shutdown the fd for twice, it is harmless. + * The s->to_dst_file may use the same fd, but we still shutdown + * the fd for twice, it is harmless. */ if (s->to_dst_file) { qemu_file_shutdown(s->to_dst_file); } if (s->rp_state.from_dst_file) { qemu_file_shutdown(s->rp_state.from_dst_file); + s->rp_state.from_dst_file = NULL; } old_state = failover_set_state(FAILOVER_STATUS_ACTIVE, -- 1.8.3.1