mirror of https://github.com/xemu-project/xemu.git
multifd: Fix the number of channels ready
We don't wait in the sem when we are doing a sync_main. Make it wait there. To make things clearer, we mark the channel ready at the begining of the thread loop. Signed-off-by: Juan Quintela <quintela@redhat.com> Reviewed-by: Fabiano Rosas <farosas@suse.de>
This commit is contained in:
parent
1eb95e1bae
commit
d2026ee117
migration
|
@ -635,6 +635,7 @@ int multifd_send_sync_main(QEMUFile *f)
|
|||
for (i = 0; i < migrate_multifd_channels(); i++) {
|
||||
MultiFDSendParams *p = &multifd_send_state->params[i];
|
||||
|
||||
qemu_sem_wait(&multifd_send_state->channels_ready);
|
||||
trace_multifd_send_sync_main_wait(p->id);
|
||||
qemu_sem_wait(&p->sem_sync);
|
||||
|
||||
|
@ -668,6 +669,7 @@ static void *multifd_send_thread(void *opaque)
|
|||
p->num_packets = 1;
|
||||
|
||||
while (true) {
|
||||
qemu_sem_post(&multifd_send_state->channels_ready);
|
||||
qemu_sem_wait(&p->sem);
|
||||
|
||||
if (qatomic_read(&multifd_send_state->exiting)) {
|
||||
|
@ -736,7 +738,6 @@ static void *multifd_send_thread(void *opaque)
|
|||
if (flags & MULTIFD_FLAG_SYNC) {
|
||||
qemu_sem_post(&p->sem_sync);
|
||||
}
|
||||
qemu_sem_post(&multifd_send_state->channels_ready);
|
||||
} else if (p->quit) {
|
||||
qemu_mutex_unlock(&p->mutex);
|
||||
break;
|
||||
|
|
Loading…
Reference in New Issue