migration: Multifd channels always wait on the sem
Either for quit, sync or packet, we first wake them. Signed-off-by: Juan Quintela <quintela@redhat.com> Reviewed-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
This commit is contained in:
parent
408ea6ae4c
commit
d82628e4bd
|
@ -875,6 +875,7 @@ static void *multifd_send_thread(void *opaque)
|
|||
p->num_packets = 1;
|
||||
|
||||
while (true) {
|
||||
qemu_sem_wait(&p->sem);
|
||||
qemu_mutex_lock(&p->mutex);
|
||||
multifd_send_fill_packet(p);
|
||||
if (p->quit) {
|
||||
|
@ -882,7 +883,9 @@ static void *multifd_send_thread(void *opaque)
|
|||
break;
|
||||
}
|
||||
qemu_mutex_unlock(&p->mutex);
|
||||
qemu_sem_wait(&p->sem);
|
||||
/* this is impossible */
|
||||
error_setg(&local_err, "multifd_send_thread: Unknown command");
|
||||
break;
|
||||
}
|
||||
|
||||
out:
|
||||
|
@ -1026,6 +1029,7 @@ static void *multifd_recv_thread(void *opaque)
|
|||
trace_multifd_recv_thread_start(p->id);
|
||||
|
||||
while (true) {
|
||||
qemu_sem_wait(&p->sem);
|
||||
qemu_mutex_lock(&p->mutex);
|
||||
if (false) {
|
||||
/* ToDo: Packet reception goes here */
|
||||
|
@ -1040,9 +1044,14 @@ static void *multifd_recv_thread(void *opaque)
|
|||
break;
|
||||
}
|
||||
qemu_mutex_unlock(&p->mutex);
|
||||
qemu_sem_wait(&p->sem);
|
||||
/* this is impossible */
|
||||
error_setg(&local_err, "multifd_recv_thread: Unknown command");
|
||||
break;
|
||||
}
|
||||
|
||||
if (local_err) {
|
||||
multifd_recv_terminate_threads(local_err);
|
||||
}
|
||||
qemu_mutex_lock(&p->mutex);
|
||||
p->running = false;
|
||||
qemu_mutex_unlock(&p->mutex);
|
||||
|
|
Loading…
Reference in a new issue