From: c00454449 <chenyuh...@huawei.com> There is a coredump while trying to destroy mutex when p->running is false but p->mutex is not unlock. Make sure all mutexes has been released before destroy them.
Signed-off-by: c00454449 <chenyuh...@huawei.com> --- migration/multifd.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/migration/multifd.c b/migration/multifd.c index b7ad7002e0..7dcdb2d3a0 100644 --- a/migration/multifd.c +++ b/migration/multifd.c @@ -523,9 +523,7 @@ void multifd_save_cleanup(void) for (i = 0; i < migrate_multifd_channels(); i++) { MultiFDSendParams *p = &multifd_send_state->params[i]; - if (p->running) { - qemu_thread_join(&p->thread); - } + qemu_thread_join(&p->thread); } for (i = 0; i < migrate_multifd_channels(); i++) { MultiFDSendParams *p = &multifd_send_state->params[i]; @@ -1040,8 +1038,8 @@ int multifd_load_cleanup(Error **errp) * however try to wakeup it without harm in cleanup phase. */ qemu_sem_post(&p->sem_sync); - qemu_thread_join(&p->thread); } + qemu_thread_join(&p->thread); } for (i = 0; i < migrate_multifd_channels(); i++) { MultiFDRecvParams *p = &multifd_recv_state->params[i]; -- 2.21.0.windows.1