]> git.proxmox.com Git - mirror_qemu.git/commit - net/colo-compare.c
net/colo-compare.c: Fix deadlock in compare_chr_send
authorLukas Straub <lukasstraub2@web.de>
Fri, 22 May 2020 07:53:53 +0000 (15:53 +0800)
committerJason Wang <jasowang@redhat.com>
Thu, 18 Jun 2020 13:05:52 +0000 (21:05 +0800)
commit9c55fe94081dd15148428d32e60fd75ec2eb37ec
treef2ba3917f28c48f65334fa1957a38fd051b1ba7b
parent2158fa1be7c1e76e2c25c32d75bb38e90cce0267
net/colo-compare.c: Fix deadlock in compare_chr_send

The chr_out chardev is connected to a filter-redirector
running in the main loop. qemu_chr_fe_write_all might block
here in compare_chr_send if the (socket-)buffer is full.
If another filter-redirector in the main loop want's to
send data to chr_pri_in it might also block if the buffer
is full. This leads to a deadlock because both event loops
get blocked.

Fix this by converting compare_chr_send to a coroutine and
putting the packets in a send queue.

Signed-off-by: Lukas Straub <lukasstraub2@web.de>
Reviewed-by: Zhang Chen <chen.zhang@intel.com>
Tested-by: Zhang Chen <chen.zhang@intel.com>
Signed-off-by: Zhang Chen <chen.zhang@intel.com>
Signed-off-by: Jason Wang <jasowang@redhat.com>
net/colo-compare.c
net/colo.c
net/colo.h