summaryrefslogtreecommitdiff
path: root/deps/jemalloc/include/jemalloc/internal/tsd_generic.h
diff options
context:
space:
mode:
authorOran Agra <oran@redislabs.com>2023-05-07 17:41:17 +0300
committerGitHub <noreply@github.com>2023-05-07 17:41:17 +0300
commit07d54dc5baa1b2e7adb5ce8e7bee398d376fe13b (patch)
treebd5b11001e44bac9cc2100dfae0af96c31bc4e99 /deps/jemalloc/include/jemalloc/internal/tsd_generic.h
parent42dd98ec191fd71528785bd7d31bd18112078f66 (diff)
parent0897c8afedc210db5f827bed9d225f24011245eb (diff)
downloadredis-07d54dc5baa1b2e7adb5ce8e7bee398d376fe13b.tar.gz
Merge pull request #12115 from oranagra/update_jemalloc_5_3_0
Upgrade to jemalloc 5.3.0 hoping to resolve a potential for deadlock in a fork child see https://github.com/jemalloc/jemalloc/issues/2402 steps: * Upgrade subtree according to the instructions in deps/README * update iget_defrag_hint by following changes to arena_dalloc_no_tcache
Diffstat (limited to 'deps/jemalloc/include/jemalloc/internal/tsd_generic.h')
-rw-r--r--deps/jemalloc/include/jemalloc/internal/tsd_generic.h23
1 files changed, 21 insertions, 2 deletions
diff --git a/deps/jemalloc/include/jemalloc/internal/tsd_generic.h b/deps/jemalloc/include/jemalloc/internal/tsd_generic.h
index cf73c0c71..a718472f3 100644
--- a/deps/jemalloc/include/jemalloc/internal/tsd_generic.h
+++ b/deps/jemalloc/include/jemalloc/internal/tsd_generic.h
@@ -52,6 +52,9 @@ tsd_cleanup_wrapper(void *arg) {
JEMALLOC_ALWAYS_INLINE void
tsd_wrapper_set(tsd_wrapper_t *wrapper) {
+ if (unlikely(!tsd_booted)) {
+ return;
+ }
if (pthread_setspecific(tsd_tsd, (void *)wrapper) != 0) {
malloc_write("<jemalloc>: Error setting TSD\n");
abort();
@@ -60,7 +63,13 @@ tsd_wrapper_set(tsd_wrapper_t *wrapper) {
JEMALLOC_ALWAYS_INLINE tsd_wrapper_t *
tsd_wrapper_get(bool init) {
- tsd_wrapper_t *wrapper = (tsd_wrapper_t *)pthread_getspecific(tsd_tsd);
+ tsd_wrapper_t *wrapper;
+
+ if (unlikely(!tsd_booted)) {
+ return &tsd_boot_wrapper;
+ }
+
+ wrapper = (tsd_wrapper_t *)pthread_getspecific(tsd_tsd);
if (init && unlikely(wrapper == NULL)) {
tsd_init_block_t block;
@@ -91,11 +100,21 @@ tsd_wrapper_get(bool init) {
JEMALLOC_ALWAYS_INLINE bool
tsd_boot0(void) {
+ tsd_wrapper_t *wrapper;
+ tsd_init_block_t block;
+
+ wrapper = (tsd_wrapper_t *)
+ tsd_init_check_recursion(&tsd_init_head, &block);
+ if (wrapper) {
+ return false;
+ }
+ block.data = &tsd_boot_wrapper;
if (pthread_key_create(&tsd_tsd, tsd_cleanup_wrapper) != 0) {
return true;
}
- tsd_wrapper_set(&tsd_boot_wrapper);
tsd_booted = true;
+ tsd_wrapper_set(&tsd_boot_wrapper);
+ tsd_init_finish(&tsd_init_head, &block);
return false;
}