Re: [Qemu-devel] [PATCH 1/5] do not call g_thread_init() for glib >= 2.31
On Tue, Apr 29, 2014 at 10:02:24AM +0400, 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. > > Signed-off-by: Michael Tokarev > --- > coroutine-gthread.c |7 ++- > util/osdep.c| 21 + > 2 files changed, 11 insertions(+), 17 deletions(-) Reviewed-by: Stefan Hajnoczi
Re: [Qemu-devel] [PATCH 1/5] do not call g_thread_init() for glib >= 2.31
On Tue, Apr 29, 2014 at 10:02:24AM +0400, 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. This looks good to me, ACK > > Signed-off-by: Michael Tokarev > --- > 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() */ > -- > 1.7.10.4 >
[Qemu-devel] [PATCH 1/5] 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 --- 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() */ -- 1.7.10.4