Normalize background thread configuration.

Also fix a compilation error #ifndef JEMALLOC_PTHREAD_CREATE_WRAPPER.
This commit is contained in:
Jason Evans 2017-06-08 22:07:21 -07:00
parent 94d655b8bd
commit 13685ab1b7
4 changed files with 17 additions and 6 deletions

View File

@ -1452,6 +1452,7 @@ if test "x$abi" != "xpecoff" ; then
[AC_SEARCH_LIBS([pthread_create], , , [AC_SEARCH_LIBS([pthread_create], , ,
AC_MSG_ERROR([libpthread is missing]))]) AC_MSG_ERROR([libpthread is missing]))])
wrap_syms="${wrap_syms} pthread_create" wrap_syms="${wrap_syms} pthread_create"
have_pthread="1"
dnl Check if we have dlsym support. dnl Check if we have dlsym support.
have_dlsym="1" have_dlsym="1"
AC_CHECK_HEADERS([dlfcn.h], AC_CHECK_HEADERS([dlfcn.h],
@ -1933,6 +1934,15 @@ if test "x${enable_zone_allocator}" = "x1" ; then
AC_DEFINE([JEMALLOC_ZONE], [ ]) AC_DEFINE([JEMALLOC_ZONE], [ ])
fi fi
dnl ============================================================================
dnl Enable background threads if possible.
if test "x${have_pthread}" = "x1" -a "x${have_dlsym}" = "x1" \
-a "x${je_cv_os_unfair_lock}" != "xyes" \
-a "x${je_cv_osspin}" != "xyes" ; then
AC_DEFINE([JEMALLOC_BACKGROUND_THREAD])
fi
dnl ============================================================================ dnl ============================================================================
dnl Check for glibc malloc hooks dnl Check for glibc malloc hooks

View File

@ -316,6 +316,11 @@
/* GNU specific sched_setaffinity support */ /* GNU specific sched_setaffinity support */
#undef JEMALLOC_HAVE_SCHED_SETAFFINITY #undef JEMALLOC_HAVE_SCHED_SETAFFINITY
/*
* If defined, all the features necessary for background threads are present.
*/
#undef JEMALLOC_BACKGROUND_THREAD
/* /*
* If defined, jemalloc symbols are not exported (doesn't work when * If defined, jemalloc symbols are not exported (doesn't work when
* JEMALLOC_PREFIX is not defined). * JEMALLOC_PREFIX is not defined).

View File

@ -168,12 +168,6 @@ static const bool force_ivsalloc =
false false
#endif #endif
; ;
#if (defined(JEMALLOC_HAVE_PTHREAD) && defined(JEMALLOC_HAVE_DLSYM) \
&& !defined(JEMALLOC_OSSPIN) && !defined(JEMALLOC_OS_UNFAIR_LOCK))
/* Currently background thread supports pthread only. */
#define JEMALLOC_BACKGROUND_THREAD
#endif
static const bool have_background_thread = static const bool have_background_thread =
#ifdef JEMALLOC_BACKGROUND_THREAD #ifdef JEMALLOC_BACKGROUND_THREAD
true true

View File

@ -635,7 +635,9 @@ background_thread_stats_read(tsdn_t *tsdn, background_thread_stats_t *stats) {
void void
background_thread_ctl_init(tsdn_t *tsdn) { background_thread_ctl_init(tsdn_t *tsdn) {
malloc_mutex_assert_not_owner(tsdn, &background_thread_lock); malloc_mutex_assert_not_owner(tsdn, &background_thread_lock);
#ifdef JEMALLOC_PTHREAD_CREATE_WRAPPER
pthread_once(&once_control, pthread_create_wrapper_once); pthread_once(&once_control, pthread_create_wrapper_once);
#endif
} }
#endif /* defined(JEMALLOC_BACKGROUND_THREAD) */ #endif /* defined(JEMALLOC_BACKGROUND_THREAD) */