If p->quit is true for any channel, we know that it has finished for any reason. So don't wait for it, just continue.
Signed-off-by: Juan Quintela <quint...@redhat.com> --- I could be convinced that the right thing to do in that case is to just do a break instead of a continue. Each option has its own advantages/disadvantanges. --- migration/ram.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/migration/ram.c b/migration/ram.c index 44ca56e1ea..bc918ef28d 100644 --- a/migration/ram.c +++ b/migration/ram.c @@ -1118,6 +1118,12 @@ static void multifd_send_sync_main(RAMState *rs) MultiFDSendParams *p = &multifd_send_state->params[i]; trace_multifd_send_sync_main_wait(p->id); + qemu_mutex_lock(&p->mutex); + if (p->quit) { + qemu_mutex_unlock(&p->mutex); + continue; + } + qemu_mutex_unlock(&p->mutex); qemu_sem_wait(&p->sem_sync); } trace_multifd_send_sync_main(multifd_send_state->packet_num); -- 2.24.1