diff options
author | Peter Maydell <peter.maydell@linaro.org> | 2017-04-04 11:40:55 +0100 |
---|---|---|
committer | Peter Maydell <peter.maydell@linaro.org> | 2017-04-04 11:40:55 +0100 |
commit | 87cc4c61020addea6a001b94b662596b1896d1b3 (patch) | |
tree | eceec77ab6e5df3c37f8b86097ec5888762ff1a9 /util | |
parent | d9123d09f711bf1b855de2b5a907d4c85f46d6c3 (diff) | |
parent | ecbddbb106114f90008024b4e6c3ba1c38d7ca0e (diff) |
Merge remote-tracking branch 'remotes/bonzini/tags/for-upstream' into staging
* MemoryRegionCache revert
* glib optimization workaround
* fix "info lapic" segfault on isapc
* fix QIOChannel memory leak
# gpg: Signature made Mon 03 Apr 2017 18:17:00 BST
# gpg: using RSA key 0xBFFBD25F78C7AE83
# gpg: Good signature from "Paolo Bonzini <bonzini@gnu.org>"
# gpg: aka "Paolo Bonzini <pbonzini@redhat.com>"
# Primary key fingerprint: 46F5 9FBD 57D6 12E7 BFD4 E2F7 7E15 100C CD36 69B1
# Subkey fingerprint: F133 3857 4B66 2389 866C 7682 BFFB D25F 78C7 AE83
* remotes/bonzini/tags/for-upstream:
main-loop: Acquire main_context lock around os_host_main_loop_wait.
exec: revert MemoryRegionCache
nbd: fix memory leak on socket_connect failed
ipmi: Fix macro issues
target-i386: fix "info lapic" segfault on isapc
iscsi: drop unused IscsiAIOCB.qiov field
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Diffstat (limited to 'util')
-rw-r--r-- | util/main-loop.c | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/util/main-loop.c b/util/main-loop.c index 4534c89308..19cad6b8b6 100644 --- a/util/main-loop.c +++ b/util/main-loop.c @@ -218,9 +218,12 @@ static void glib_pollfds_poll(void) static int os_host_main_loop_wait(int64_t timeout) { + GMainContext *context = g_main_context_default(); int ret; static int spin_counter; + g_main_context_acquire(context); + glib_pollfds_fill(&timeout); /* If the I/O thread is very busy or we are incorrectly busy waiting in @@ -256,6 +259,9 @@ static int os_host_main_loop_wait(int64_t timeout) } glib_pollfds_poll(); + + g_main_context_release(context); + return ret; } #else @@ -412,12 +418,15 @@ static int os_host_main_loop_wait(int64_t timeout) fd_set rfds, wfds, xfds; int nfds; + g_main_context_acquire(context); + /* XXX: need to suppress polling by better using win32 events */ ret = 0; for (pe = first_polling_entry; pe != NULL; pe = pe->next) { ret |= pe->func(pe->opaque); } if (ret != 0) { + g_main_context_release(context); return ret; } @@ -472,6 +481,8 @@ static int os_host_main_loop_wait(int64_t timeout) g_main_context_dispatch(context); } + g_main_context_release(context); + return select_ret || g_poll_ret; } #endif |