]> git.proxmox.com Git - mirror_qemu.git/commit
migration: fix migrate_cancel multifd migration leads destination hung forever
authorIvan Ren <renyime@gmail.com>
Tue, 25 Jun 2019 13:18:19 +0000 (21:18 +0800)
committerJuan Quintela <quintela@redhat.com>
Wed, 24 Jul 2019 12:47:21 +0000 (14:47 +0200)
commitf193bc0c5342496ce07355c0c30394560a7f4738
tree1a0d34b3f572236768cad67771c04a8078806b9c
parent3c3ca25d1f067f93876730cb55c59d43194fe815
migration: fix migrate_cancel multifd migration leads destination hung forever

When migrate_cancel a multifd migration, if run sequence like this:

        [source]                              [destination]

multifd_send_sync_main[finish]
                                    multifd_recv_thread wait &p->sem_sync
shutdown to_dst_file
                                    detect error from_src_file
send  RAM_SAVE_FLAG_EOS[fail]       [no chance to run multifd_recv_sync_main]
                                    multifd_load_cleanup
                                    join multifd receive thread forever

will lead destination qemu hung at following stack:

pthread_join
qemu_thread_join
multifd_load_cleanup
process_incoming_migration_co
coroutine_trampoline

Signed-off-by: Ivan Ren <ivanren@tencent.com>
Reviewed-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
Reviewed-by: Juan Quintela <quintela@redhat.com>
Message-Id: <1561468699-9819-4-git-send-email-ivanren@tencent.com>
Signed-off-by: Juan Quintela <quintela@redhat.com>
migration/ram.c