mirror of https://github.com/xemu-project/xemu.git
migration/multifd: Release recv sem_sync earlier
Now that multifd_recv_terminate_threads() is called only once, release the recv side sem_sync earlier like we do for the send side. Signed-off-by: Fabiano Rosas <farosas@suse.de> Reviewed-by: Peter Xu <peterx@redhat.com> Link: https://lore.kernel.org/r/20240220224138.24759-6-farosas@suse.de Signed-off-by: Peter Xu <peterx@redhat.com>
This commit is contained in:
parent
11dd7be575
commit
d13f0026c7
|
@ -1104,6 +1104,12 @@ static void multifd_recv_terminate_threads(Error *err)
|
||||||
for (i = 0; i < migrate_multifd_channels(); i++) {
|
for (i = 0; i < migrate_multifd_channels(); i++) {
|
||||||
MultiFDRecvParams *p = &multifd_recv_state->params[i];
|
MultiFDRecvParams *p = &multifd_recv_state->params[i];
|
||||||
|
|
||||||
|
/*
|
||||||
|
* multifd_recv_thread may hung at MULTIFD_FLAG_SYNC handle code,
|
||||||
|
* however try to wakeup it without harm in cleanup phase.
|
||||||
|
*/
|
||||||
|
qemu_sem_post(&p->sem_sync);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* We could arrive here for two reasons:
|
* We could arrive here for two reasons:
|
||||||
* - normal quit, i.e. everything went fine, just finished
|
* - normal quit, i.e. everything went fine, just finished
|
||||||
|
@ -1162,12 +1168,6 @@ void multifd_recv_cleanup(void)
|
||||||
for (i = 0; i < migrate_multifd_channels(); i++) {
|
for (i = 0; i < migrate_multifd_channels(); i++) {
|
||||||
MultiFDRecvParams *p = &multifd_recv_state->params[i];
|
MultiFDRecvParams *p = &multifd_recv_state->params[i];
|
||||||
|
|
||||||
/*
|
|
||||||
* multifd_recv_thread may hung at MULTIFD_FLAG_SYNC handle code,
|
|
||||||
* however try to wakeup it without harm in cleanup phase.
|
|
||||||
*/
|
|
||||||
qemu_sem_post(&p->sem_sync);
|
|
||||||
|
|
||||||
if (p->thread_created) {
|
if (p->thread_created) {
|
||||||
qemu_thread_join(&p->thread);
|
qemu_thread_join(&p->thread);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue