Message ID | 1398751349-20869-2-git-send-email-mjt@msgid.tls.msk.ru |
---|---|
State | New |
Headers | show |
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 <mjt@tls.msk.ru> > --- > 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 >
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 <mjt@tls.msk.ru> > --- > coroutine-gthread.c | 7 ++----- > util/osdep.c | 21 +++++++++------------ > 2 files changed, 11 insertions(+), 17 deletions(-) Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
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() */
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> --- coroutine-gthread.c | 7 ++----- util/osdep.c | 21 +++++++++------------ 2 files changed, 11 insertions(+), 17 deletions(-)