diff options
author | Peter Maydell | 2018-04-10 23:16:19 +0200 |
---|---|---|
committer | Peter Maydell | 2018-04-10 23:16:19 +0200 |
commit | 26d6a7c87b05017ffabffb5e16837a0fccf67e90 (patch) | |
tree | 802fcece5cbe575f0d6bac29cc359e46fffad6c4 /iothread.c | |
parent | Merge remote-tracking branch 'remotes/dgibson/tags/ppc-for-2.12-20180410' int... (diff) | |
parent | monitor: bind dispatch bh to iohandler context (diff) | |
download | qemu-26d6a7c87b05017ffabffb5e16837a0fccf67e90.tar.gz qemu-26d6a7c87b05017ffabffb5e16837a0fccf67e90.tar.xz qemu-26d6a7c87b05017ffabffb5e16837a0fccf67e90.zip |
Merge remote-tracking branch 'remotes/ericb/tags/pull-qapi-2018-04-10' into staging
qapi patches for 2018-04-10
- Peter Xu: iotests: fix wait_until_completed()
- Peter Xu: iothread: workaround glib bug which hangs qmp-test
- Peter Xu: monitor: bind dispatch bh to iohandler context
# gpg: Signature made Tue 10 Apr 2018 14:15:09 BST
# gpg: using RSA key A7A16B4A2527436A
# gpg: Good signature from "Eric Blake <eblake@redhat.com>"
# gpg: aka "Eric Blake (Free Software Programmer) <ebb9@byu.net>"
# gpg: aka "[jpeg image of size 6874]"
# Primary key fingerprint: 71C2 CC22 B1C4 6029 27D2 F3AA A7A1 6B4A 2527 436A
* remotes/ericb/tags/pull-qapi-2018-04-10:
monitor: bind dispatch bh to iohandler context
iothread: workaround glib bug which hangs qmp-test
iotests: fix wait_until_completed()
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Diffstat (limited to 'iothread.c')
-rw-r--r-- | iothread.c | 18 |
1 files changed, 14 insertions, 4 deletions
diff --git a/iothread.c b/iothread.c index e675c38442..aff1281257 100644 --- a/iothread.c +++ b/iothread.c @@ -117,16 +117,26 @@ static void iothread_instance_finalize(Object *obj) IOThread *iothread = IOTHREAD(obj); iothread_stop(iothread); + /* + * Before glib2 2.33.10, there is a glib2 bug that GSource context + * pointer may not be cleared even if the context has already been + * destroyed (while it should). Here let's free the AIO context + * earlier to bypass that glib bug. + * + * We can remove this comment after the minimum supported glib2 + * version boosts to 2.33.10. Before that, let's free the + * GSources first before destroying any GMainContext. + */ + if (iothread->ctx) { + aio_context_unref(iothread->ctx); + iothread->ctx = NULL; + } 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) { - return; - } - aio_context_unref(iothread->ctx); } static void iothread_complete(UserCreatable *obj, Error **errp) |