[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH v4 4/5] iothread: delay the context release to final
From: |
Peter Xu |
Subject: |
[Qemu-devel] [PATCH v4 4/5] iothread: delay the context release to finalize |
Date: |
Thu, 28 Sep 2017 10:59:57 +0800 |
When gcontext is used with iothread, the context will be destroyed
during iothread_stop(). That's not good since sometimes we would like
to keep the resources until iothread is destroyed, but we may want to
stop the thread before that point.
Delay the destruction of gcontext to iothread finalize. Then we can do:
iothread_stop(thread);
some_cleanup_on_resources();
iothread_destroy(thread);
We may need this patch if we want to run chardev IOs in iothreads and
hopefully clean them up correctly. For more specific information,
please see 2b316774f6 ("qemu-char: do not operate on sources from
finalize callbacks").
Reviewed-by: Fam Zheng <address@hidden>
Reviewed-by: Stefan Hajnoczi <address@hidden>
Signed-off-by: Peter Xu <address@hidden>
---
iothread.c | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/iothread.c b/iothread.c
index b3c092b2d7..27a4288578 100644
--- a/iothread.c
+++ b/iothread.c
@@ -71,8 +71,6 @@ static void *iothread_run(void *opaque)
g_main_loop_unref(loop);
g_main_context_pop_thread_default(iothread->worker_context);
- g_main_context_unref(iothread->worker_context);
- iothread->worker_context = NULL;
}
}
@@ -117,6 +115,10 @@ static void iothread_instance_finalize(Object *obj)
IOThread *iothread = IOTHREAD(obj);
iothread_stop(iothread);
+ if (iothread->worker_context) {
+ g_main_context_unref(iothread->worker_context);
+ iothread->worker_context = NULL;
+ }
qemu_cond_destroy(&iothread->init_done_cond);
qemu_mutex_destroy(&iothread->init_done_lock);
if (!iothread->ctx) {
--
2.13.5
- [Qemu-devel] [PATCH v4 0/5] iothread: allow to create internal iothreads, Peter Xu, 2017/09/27
- [Qemu-devel] [PATCH v4 1/5] qom: provide root container for internal objs, Peter Xu, 2017/09/27
- [Qemu-devel] [PATCH v4 2/5] iothread: provide helpers for internal use, Peter Xu, 2017/09/27
- [Qemu-devel] [PATCH v4 3/5] iothread: export iothread_stop(), Peter Xu, 2017/09/27
- [Qemu-devel] [PATCH v4 4/5] iothread: delay the context release to finalize,
Peter Xu <=
- [Qemu-devel] [PATCH v4 5/5] aio: fix assert when remove poll during destroy, Peter Xu, 2017/09/27
- Re: [Qemu-devel] [PATCH v4 0/5] iothread: allow to create internal iothreads, Stefan Hajnoczi, 2017/09/28