diff options
author | Chuan Zheng <zhengchuan@huawei.com> | 2020-11-06 14:24:53 +0800 |
---|---|---|
committer | Dr. David Alan Gilbert <dgilbert@redhat.com> | 2020-11-12 14:35:29 +0000 |
commit | a1af605bd5ade1a6dd571f553a6746b97f3d6869 (patch) | |
tree | 120240d42ba9e7bc18b322f3599c12ffa33993df /python/qemu/machine.py | |
parent | 136fc6aa2cf38205fa3b47e155ebac11baccc789 (diff) | |
download | qemu-a1af605bd5ade1a6dd571f553a6746b97f3d6869.zip qemu-a1af605bd5ade1a6dd571f553a6746b97f3d6869.tar.gz qemu-a1af605bd5ade1a6dd571f553a6746b97f3d6869.tar.bz2 |
migration/multifd: fix hangup with TLS-Multifd due to blocking handshake
The qemu main loop could hang up forever when we enable TLS+Multifd.
The Src multifd_send_0 invokes tls handshake, it sends hello to sever
and wait response.
However, the Dst main qemu loop has been waiting recvmsg() for multifd_recv_1.
Both of Src and Dst main qemu loop are blocking and waiting for reponse which
results in hanging up forever.
Src: (multifd_send_0) Dst: (multifd_recv_1)
multifd_channel_connect migration_channel_process_incoming
multifd_tls_channel_connect migration_tls_channel_process_incoming
multifd_tls_channel_connect qio_channel_tls_handshake_task
qio_channel_tls_handshake gnutls_handshake
qio_channel_tls_handshake_task ...
qcrypto_tls_session_handshake ...
gnutls_handshake ...
... ...
recvmsg (Blocking I/O waiting for response) recvmsg (Blocking I/O waiting for response)
Fix this by offloadinig handshake work to a background thread.
Reported-by: Yan Jin <jinyan12@huawei.com>
Suggested-by: Daniel P. Berrangé <berrange@redhat.com>
Signed-off-by: Chuan Zheng <zhengchuan@huawei.com>
Message-Id: <1604643893-8223-1-git-send-email-zhengchuan@huawei.com>
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
Signed-off-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
Diffstat (limited to 'python/qemu/machine.py')
0 files changed, 0 insertions, 0 deletions