43 lines
1.4 KiB
Diff
43 lines
1.4 KiB
Diff
|
|
From 4bf84b63bf1b2fba031fc6c3f4948785d534df3b Mon Sep 17 00:00:00 2001
|
||
|
|
From: Chuan Zheng <zhengchuan@huawei.com>
|
||
|
|
Date: Fri, 5 Mar 2021 16:10:57 +0800
|
||
|
|
Subject: [PATCH] migration/tls: add error handling in
|
||
|
|
multifd_tls_handshake_thread
|
||
|
|
|
||
|
|
If any error happens during multifd send thread creating (e.g. channel broke
|
||
|
|
because new domain is destroyed by the dst), multifd_tls_handshake_thread
|
||
|
|
may exit silently, leaving main migration thread hanging (ram_save_setup ->
|
||
|
|
multifd_send_sync_main -> qemu_sem_wait(&p->sem_sync)).
|
||
|
|
Fix that by adding error handling in multifd_tls_handshake_thread.
|
||
|
|
|
||
|
|
Signed-off-by: Hao Wang <wanghao232@huawei.com>
|
||
|
|
---
|
||
|
|
migration/ram.c | 11 ++++++++++-
|
||
|
|
1 file changed, 10 insertions(+), 1 deletion(-)
|
||
|
|
|
||
|
|
diff --git a/migration/ram.c b/migration/ram.c
|
||
|
|
index 3338363e9d..d4ac696899 100644
|
||
|
|
--- a/migration/ram.c
|
||
|
|
+++ b/migration/ram.c
|
||
|
|
@@ -1516,7 +1516,16 @@ static void multifd_tls_outgoing_handshake(QIOTask *task,
|
||
|
|
} else {
|
||
|
|
trace_multifd_tls_outgoing_handshake_complete(ioc);
|
||
|
|
}
|
||
|
|
- multifd_channel_connect(p, ioc, err);
|
||
|
|
+
|
||
|
|
+ if (!multifd_channel_connect(p, ioc, err)) {
|
||
|
|
+ /*
|
||
|
|
+ * Error happen, mark multifd_send_thread status as 'quit' although it
|
||
|
|
+ * is not created, and then tell who pay attention to me.
|
||
|
|
+ */
|
||
|
|
+ p->quit = true;
|
||
|
|
+ qemu_sem_post(&multifd_send_state->channels_ready);
|
||
|
|
+ qemu_sem_post(&p->sem_sync);
|
||
|
|
+ }
|
||
|
|
}
|
||
|
|
|
||
|
|
static void *multifd_tls_handshake_thread(void *opaque)
|
||
|
|
--
|
||
|
|
2.27.0
|
||
|
|
|