02.05.2014 18:35, Michael Tokarev wrote: > 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.
Applied to -trivial, thanks! /mjt > Signed-off-by: Michael Tokarev <m...@tls.msk.ru> > Reviewed-by: Stefan Hajnoczi <stefa...@redhat.com> > Cc: qemu-triv...@nongnu.org > --- > coroutine-gthread.c | 7 ++----- > 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() */ >