[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 1/3] colo-compare: serialize compare thread's initia
From: |
zhanghailiang |
Subject: |
[Qemu-devel] [PATCH 1/3] colo-compare: serialize compare thread's initialization with main thread |
Date: |
Thu, 20 Apr 2017 15:46:53 +0800 |
We call qemu_chr_fe_set_handlers() in colo-compare thread, it is used
to detach watched fd from default main context, so it has chance to
handle the same watched fd with main thread concurrently, which will
trigger an error report:
"qemu-char.c:918: io_watch_poll_finalize: Assertion `iwp->src == ((void *)0)'
failed."
Fix it by serializing compare thread's initialization with main thread.
Signed-off-by: zhanghailiang <address@hidden>
---
net/colo-compare.c | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/net/colo-compare.c b/net/colo-compare.c
index 54e6d40..a6bf419 100644
--- a/net/colo-compare.c
+++ b/net/colo-compare.c
@@ -83,6 +83,7 @@ typedef struct CompareState {
GHashTable *connection_track_table;
/* compare thread, a thread for each NIC */
QemuThread thread;
+ QemuSemaphore thread_ready;
GMainContext *worker_context;
GMainLoop *compare_loop;
@@ -557,6 +558,8 @@ static void *colo_compare_thread(void *opaque)
(GSourceFunc)check_old_packet_regular, s, NULL);
g_source_attach(timeout_source, s->worker_context);
+ qemu_sem_post(&s->thread_ready);
+
g_main_loop_run(s->compare_loop);
g_source_unref(timeout_source);
@@ -707,12 +710,15 @@ static void colo_compare_complete(UserCreatable *uc,
Error **errp)
connection_key_equal,
g_free,
connection_destroy);
+ qemu_sem_init(&s->thread_ready, 0);
sprintf(thread_name, "colo-compare %d", compare_id);
qemu_thread_create(&s->thread, thread_name,
colo_compare_thread, s,
QEMU_THREAD_JOINABLE);
compare_id++;
+ qemu_sem_wait(&s->thread_ready);
+ qemu_sem_destroy(&s->thread_ready);
return;
}
--
1.8.3.1
- [Qemu-devel] [PATCH 0/3] colo-compare: fix three bugs, zhanghailiang, 2017/04/20
- [Qemu-devel] [PATCH 2/3] colo-compare: Check main_loop value before call g_main_loop_quit, zhanghailiang, 2017/04/20
- [Qemu-devel] [PATCH 3/3] colo-compare: fix a memory leak, zhanghailiang, 2017/04/20
- [Qemu-devel] [PATCH 1/3] colo-compare: serialize compare thread's initialization with main thread,
zhanghailiang <=
- Re: [Qemu-devel] [PATCH 1/3] colo-compare: serialize compare thread's initialization with main thread, Jason Wang, 2017/04/24
- Re: [Qemu-devel] [PATCH 1/3] colo-compare: serialize compare thread's initialization with main thread, Hailiang Zhang, 2017/04/24
- Re: [Qemu-devel] [PATCH 1/3] colo-compare: serialize compare thread's initialization with main thread, Jason Wang, 2017/04/25
- Re: [Qemu-devel] [PATCH 1/3] colo-compare: serialize compare thread's initialization with main thread, Hailiang Zhang, 2017/04/25
- Re: [Qemu-devel] [PATCH 1/3] colo-compare: serialize compare thread's initialization with main thread, Jason Wang, 2017/04/25
- Re: [Qemu-devel] [PATCH 1/3] colo-compare: serialize compare thread's initialization with main thread, Hailiang Zhang, 2017/04/26