diff options
author | Qi Wang <interwq@gwu.edu> | 2017-06-07 23:12:50 (GMT) |
---|---|---|
committer | Qi Wang <interwq@gmail.com> | 2017-06-08 17:02:18 (GMT) |
commit | 5642f03cae54eb8798dc4fa5ea28d9569572c1af (patch) | |
tree | 1aba5f85db4c5cfc18205b551f7031fdcc3a11f0 /src | |
parent | 73713fbb27cd1cf6754259b19a960e91a16c3638 (diff) | |
download | jemalloc-5642f03cae54eb8798dc4fa5ea28d9569572c1af.zip jemalloc-5642f03cae54eb8798dc4fa5ea28d9569572c1af.tar.gz jemalloc-5642f03cae54eb8798dc4fa5ea28d9569572c1af.tar.bz2 |
Add internal tsd for background_thread.
Diffstat (limited to 'src')
-rw-r--r-- | src/background_thread.c | 9 | ||||
-rw-r--r-- | src/tsd.c | 11 |
2 files changed, 14 insertions, 6 deletions
diff --git a/src/background_thread.c b/src/background_thread.c index 50812c3..190fa2f 100644 --- a/src/background_thread.c +++ b/src/background_thread.c @@ -316,12 +316,11 @@ background_thread_entry(void *ind_arg) { set_current_thread_affinity((int)thread_ind); } /* - * Start periodic background work. We avoid fetching tsd to keep the - * background thread "outside", since there may be side effects, for - * example triggering new arena creation (which in turn triggers - * background thread creation). + * Start periodic background work. We use internal tsd which avoids + * side effects, for example triggering new arena creation (which in + * turn triggers another background thread creation). */ - background_work(TSDN_NULL, thread_ind); + background_work(tsd_tsdn(tsd_internal_fetch()), thread_ind); assert(pthread_equal(pthread_self(), background_thread_info[thread_ind].thread)); @@ -103,7 +103,16 @@ tsd_data_init_nocleanup(tsd_t *tsd) { } tsd_t * -tsd_fetch_slow(tsd_t *tsd) { +tsd_fetch_slow(tsd_t *tsd, bool internal) { + if (internal) { + /* For internal background threads use only. */ + assert(tsd->state == tsd_state_uninitialized); + tsd->state = tsd_state_reincarnated; + tsd_set(tsd); + tsd_data_init_nocleanup(tsd); + return tsd; + } + if (tsd->state == tsd_state_nominal_slow) { /* On slow path but no work needed. */ assert(malloc_slow || !tsd_tcache_enabled_get(tsd) || |