aboutsummaryrefslogtreecommitdiff
path: root/migration
diff options
context:
space:
mode:
authorLeonardo Bras <leobras@redhat.com>2023-02-10 03:36:30 -0300
committerJuan Quintela <quintela@redhat.com>2023-02-13 03:45:34 +0100
commit10351fbad1ee1c1827073c8b2bd644fc897c8ceb (patch)
treec73802d2c0109ca2822d62f0d0e0ec1e2936bac4 /migration
parentd926f3bb2a84fdb746678629279a143f568c3c86 (diff)
downloadqemu-10351fbad1ee1c1827073c8b2bd644fc897c8ceb.zip
qemu-10351fbad1ee1c1827073c8b2bd644fc897c8ceb.tar.gz
qemu-10351fbad1ee1c1827073c8b2bd644fc897c8ceb.tar.bz2
migration/multifd: Join all multifd threads in order to avoid leaks
Current approach will only join threads that are still running. For the threads not joined, resources or private memory are always kept in the process space and never reclaimed before process end, and this risks serious memory leaks. This should usually not represent a big problem, since multifd migration is usually just ran at most a few times, and after it succeeds there is not much to be done before exiting the process. Yet still, it should not hurt performance to join all of them. Fixes: b5eea99ec2 ("migration: Add yank feature") Reported-by: Li Xiaohui <xiaohli@redhat.com> Signed-off-by: Leonardo Bras <leobras@redhat.com> Reviewed-by: Juan Quintela <quintela@redhat.com> Reviewed-by: Peter Xu <peterx@redhat.com> Signed-off-by: Juan Quintela <quintela@redhat.com>
Diffstat (limited to 'migration')
-rw-r--r--migration/multifd.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/migration/multifd.c b/migration/multifd.c
index 3dd569d..840d581 100644
--- a/migration/multifd.c
+++ b/migration/multifd.c
@@ -1030,8 +1030,9 @@ void multifd_load_cleanup(void)
* 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];