File 6742-beam-remove-allocator-wrappers.patch of Package erlang

From 19a51d21179f7ca07eb90d23ef749cdb52cca141 Mon Sep 17 00:00:00 2001
From: Maxim Fedorov <maximfca@gmail.com>
Date: Fri, 7 Jan 2022 17:36:56 -0800
Subject: [PATCH 2/3] [beam] remove allocator wrappers

It was only used by memory tracing feature that has also
been removed.
---
 erts/emulator/beam/erl_alloc.c      | 51 -----------------------------
 erts/emulator/beam/erl_alloc.h      | 19 -----------
 erts/emulator/beam/erl_alloc_util.c |  6 ----
 3 files changed, 76 deletions(-)

diff --git a/erts/emulator/beam/erl_alloc.c b/erts/emulator/beam/erl_alloc.c
index 08f825312a..f3c091646f 100644
--- a/erts/emulator/beam/erl_alloc.c
+++ b/erts/emulator/beam/erl_alloc.c
@@ -654,9 +654,6 @@ erts_alloc_init(int *argc, char **argv, ErtsAllocInitOpts *eaiop)
     if (ncpu < 1)
 	ncpu = 1;
 
-    erts_tsd_key_create(&erts_allctr_prelock_tsd_key,
-			"erts_allctr_prelock_tsd_key");
-
     erts_sys_alloc_init();
     erts_init_utils_mem();
 
@@ -3439,54 +3436,6 @@ badarg:
     return res;
 }
 
-/* 
- * The allocator wrapper prelocking stuff below is about the locking order.
- * It only affects wrappers (erl_mtrace.c) that keep locks during
- * alloc/realloc/free.
- *
- * Some query functions in erl_alloc_util.c lock the allocator mutex and then
- * use erts_printf that in turn may call the sys allocator through the wrappers.
- * To avoid breaking locking order these query functions first "pre-locks" all
- * allocator wrappers.
- */
-ErtsAllocatorWrapper_t *erts_allctr_wrappers;
-int erts_allctr_wrapper_prelocked = 0;
-erts_tsd_key_t erts_allctr_prelock_tsd_key;
-
-void erts_allctr_wrapper_prelock_init(ErtsAllocatorWrapper_t* wrapper)
-{
-    ASSERT(wrapper->lock && wrapper->unlock);
-    wrapper->next = erts_allctr_wrappers;
-    erts_allctr_wrappers = wrapper;
-}
-
-void erts_allctr_wrapper_pre_lock(void)
-{
-    if (erts_allctr_wrappers) {
-	ErtsAllocatorWrapper_t* wrapper = erts_allctr_wrappers;
-	for ( ; wrapper; wrapper = wrapper->next) {
-	    wrapper->lock();
-	}
-	ASSERT(!erts_allctr_wrapper_prelocked);
-	erts_allctr_wrapper_prelocked = 1;
-	erts_tsd_set(erts_allctr_prelock_tsd_key, (void*)1);
-    }
-}
-
-void erts_allctr_wrapper_pre_unlock(void)
-{
-    if (erts_allctr_wrappers) {
-	ErtsAllocatorWrapper_t* wrapper = erts_allctr_wrappers;
-	
-	erts_allctr_wrapper_prelocked = 0;
-	erts_tsd_set(erts_allctr_prelock_tsd_key, (void*)0);
-	for ( ; wrapper; wrapper = wrapper->next) {
-	    wrapper->unlock();
-	}
-    }
-}
-
-
 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\
  * NOTE: erts_alc_test() is only supposed to be used for testing.            *
  *                                                                           *
diff --git a/erts/emulator/beam/erl_alloc.h b/erts/emulator/beam/erl_alloc.h
index c0c1890b0a..78591f633d 100644
--- a/erts/emulator/beam/erl_alloc.h
+++ b/erts/emulator/beam/erl_alloc.h
@@ -164,18 +164,6 @@ typedef struct {
 
 extern ErtsAllocatorThrSpec_t erts_allctr_thr_spec[ERTS_ALC_A_MAX+1];
 
-typedef struct ErtsAllocatorWrapper_t_ {
-    void (*lock)(void);
-    void (*unlock)(void);
-    struct ErtsAllocatorWrapper_t_* next;
-}ErtsAllocatorWrapper_t;
-extern ErtsAllocatorWrapper_t *erts_allctr_wrappers;
-extern int erts_allctr_wrapper_prelocked;
-extern erts_tsd_key_t erts_allctr_prelock_tsd_key;
-void erts_allctr_wrapper_prelock_init(ErtsAllocatorWrapper_t* wrapper);
-void erts_allctr_wrapper_pre_lock(void);
-void erts_allctr_wrapper_pre_unlock(void);
-
 void erts_alloc_register_scheduler(void *vesdp);
 void erts_alloc_scheduler_handle_delayed_dealloc(void *vesdp,
 						 int *need_thr_progress,
@@ -320,13 +308,6 @@ void *erts_realloc_fnf(ErtsAlcType_t type, void *ptr, Uint size)
     return res;
 }
 
-ERTS_ALC_INLINE
-int erts_is_allctr_wrapper_prelocked(void)
-{
-    return erts_allctr_wrapper_prelocked                 /* locked */
-	&& !!erts_tsd_get(erts_allctr_prelock_tsd_key);  /* by me  */
-}
-
 #ifdef ERTS_HAVE_IS_IN_LITERAL_RANGE
 
 ERTS_ALC_FORCE_INLINE
diff --git a/erts/emulator/beam/erl_alloc_util.c b/erts/emulator/beam/erl_alloc_util.c
index 9c32308a7c..5d14519890 100644
--- a/erts/emulator/beam/erl_alloc_util.c
+++ b/erts/emulator/beam/erl_alloc_util.c
@@ -5522,13 +5522,11 @@ erts_alcu_info_options(Allctr_t *allctr,
 	ensure_atoms_initialized(allctr);
 
     if (allctr->thread_safe) {
-	erts_allctr_wrapper_pre_lock();
 	erts_mtx_lock(&allctr->mutex);
     }
     res = info_options(allctr, print_to_p, print_to_arg, hpp, szp);
     if (allctr->thread_safe) { 
 	erts_mtx_unlock(&allctr->mutex);
-	erts_allctr_wrapper_pre_unlock();
     }
     return res;
 }
@@ -5561,7 +5559,6 @@ erts_alcu_sz_info(Allctr_t *allctr,
 	ensure_atoms_initialized(allctr);
 
     if (allctr->thread_safe) {
-	erts_allctr_wrapper_pre_lock();
 	erts_mtx_lock(&allctr->mutex);
     }
 
@@ -5599,7 +5596,6 @@ erts_alcu_sz_info(Allctr_t *allctr,
 
     if (allctr->thread_safe) {
 	erts_mtx_unlock(&allctr->mutex);
-	erts_allctr_wrapper_pre_unlock();
     }
 
     return res;
@@ -5632,7 +5628,6 @@ erts_alcu_info(Allctr_t *allctr,
 	ensure_atoms_initialized(allctr);
 
     if (allctr->thread_safe) {
-	erts_allctr_wrapper_pre_lock();
 	erts_mtx_lock(&allctr->mutex);
     }
 
@@ -5687,7 +5682,6 @@ erts_alcu_info(Allctr_t *allctr,
 
     if (allctr->thread_safe) {
 	erts_mtx_unlock(&allctr->mutex);
-	erts_allctr_wrapper_pre_unlock();
     }
 
     return res;
-- 
2.31.1

openSUSE Build Service is sponsored by