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
|
@ -635,6 +635,7 @@ int multifd_send_sync_main(QEMUFile *f)
|
||||||
for (i = 0; i < migrate_multifd_channels(); i++) {
|
for (i = 0; i < migrate_multifd_channels(); i++) {
|
||||||
MultiFDSendParams *p = &multifd_send_state->params[i];
|
MultiFDSendParams *p = &multifd_send_state->params[i];
|
||||||
|
|
||||||
|
qemu_sem_wait(&multifd_send_state->channels_ready);
|
||||||
trace_multifd_send_sync_main_wait(p->id);
|
trace_multifd_send_sync_main_wait(p->id);
|
||||||
qemu_sem_wait(&p->sem_sync);
|
qemu_sem_wait(&p->sem_sync);
|
||||||
|
|
||||||
|
@ -668,6 +669,7 @@ static void *multifd_send_thread(void *opaque)
|
||||||
p->num_packets = 1;
|
p->num_packets = 1;
|
||||||
|
|
||||||
while (true) {
|
while (true) {
|
||||||
|
qemu_sem_post(&multifd_send_state->channels_ready);
|
||||||
qemu_sem_wait(&p->sem);
|
qemu_sem_wait(&p->sem);
|
||||||
|
|
||||||
if (qatomic_read(&multifd_send_state->exiting)) {
|
if (qatomic_read(&multifd_send_state->exiting)) {
|
||||||
|
@ -736,7 +738,6 @@ static void *multifd_send_thread(void *opaque)
|
||||||
if (flags & MULTIFD_FLAG_SYNC) {
|
if (flags & MULTIFD_FLAG_SYNC) {
|
||||||
qemu_sem_post(&p->sem_sync);
|
qemu_sem_post(&p->sem_sync);
|
||||||
}
|
}
|
||||||
qemu_sem_post(&multifd_send_state->channels_ready);
|
|
||||||
} else if (p->quit) {
|
} else if (p->quit) {
|
||||||
qemu_mutex_unlock(&p->mutex);
|
qemu_mutex_unlock(&p->mutex);
|
||||||
break;
|
break;
|
||||||
|
|
Loading…
Reference in New Issue