diff options
author | Michael Tokarev <mjt@tls.msk.ru> | 2014-05-02 18:35:55 +0400 |
---|---|---|
committer | Michael Tokarev <mjt@tls.msk.ru> | 2014-05-07 21:00:43 +0400 |
commit | f33cc84dd4af7776309d118412df008ec4108a57 (patch) | |
tree | 74e48586df6aa4df8ee651827f30e2ed55d27e02 | |
parent | 69b15212d761889b2768b654f09a0eac78951674 (diff) | |
download | qemu-f33cc84dd4af7776309d118412df008ec4108a57.zip qemu-f33cc84dd4af7776309d118412df008ec4108a57.tar.gz qemu-f33cc84dd4af7776309d118412df008ec4108a57.tar.bz2 |
do not call g_thread_init() for glib >= 2.31
glib >= 2.31 always enables thread support and g_thread_supported()
is #defined to 1, there's no need to call g_thread_init() anymore,
and it definitely does not need to report error which never happens.
Keep code for old < 2.31 glibc anyway for now, just #ifdef it
differently.
Signed-off-by: Michael Tokarev <mjt@tls.msk.ru>
Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
Cc: qemu-trivial@nongnu.org
-rw-r--r-- | coroutine-gthread.c | 7 | ||||
-rw-r--r-- | util/osdep.c | 21 |
2 files changed, 11 insertions, 17 deletions
diff --git a/coroutine-gthread.c b/coroutine-gthread.c index d3e5b99..a61efe0 100644 --- a/coroutine-gthread.c +++ b/coroutine-gthread.c @@ -115,14 +115,11 @@ static inline GThread *create_thread(GThreadFunc func, gpointer data) static void __attribute__((constructor)) coroutine_init(void) { - if (!g_thread_supported()) { #if !GLIB_CHECK_VERSION(2, 31, 0) + if (!g_thread_supported()) { g_thread_init(NULL); -#else - fprintf(stderr, "glib threading failed to initialize.\n"); - exit(1); -#endif } +#endif init_coroutine_cond(); } diff --git a/util/osdep.c b/util/osdep.c index a9029f8..b2bd154 100644 --- a/util/osdep.c +++ b/util/osdep.c @@ -436,23 +436,20 @@ int socket_init(void) return 0; } -/* Ensure that glib is running in multi-threaded mode */ +#if !GLIB_CHECK_VERSION(2, 31, 0) +/* Ensure that glib is running in multi-threaded mode + * Old versions of glib require explicit initialization. Failure to do + * this results in the single-threaded code paths being taken inside + * glib. For example, the g_slice allocator will not be thread-safe + * and cause crashes. + */ static void __attribute__((constructor)) thread_init(void) { if (!g_thread_supported()) { -#if !GLIB_CHECK_VERSION(2, 31, 0) - /* Old versions of glib require explicit initialization. Failure to do - * this results in the single-threaded code paths being taken inside - * glib. For example, the g_slice allocator will not be thread-safe - * and cause crashes. - */ - g_thread_init(NULL); -#else - fprintf(stderr, "glib threading failed to initialize.\n"); - exit(1); -#endif + g_thread_init(NULL); } } +#endif #ifndef CONFIG_IOVEC /* helper function for iov_send_recv() */ |