File 3522-erts-Skip-main-carrier-for-ets_alloc-instance-0.patch of Package erlang

From 8517467d2b984a5e36f87f648b1fd26b8f1b9efc Mon Sep 17 00:00:00 2001
From: Sverker Eriksson <sverker@erlang.org>
Date: Mon, 19 Apr 2021 11:57:36 +0200
Subject: [PATCH 2/3] erts: Skip main carrier for ets_alloc instance 0

Don't think instance 0 of ets_alloc is ever used,
at least ets_SUITE never used it.
---
 erts/emulator/beam/erl_alloc.c      | 1 +
 erts/emulator/beam/erl_alloc_util.c | 2 +-
 erts/emulator/beam/erl_alloc_util.h | 3 +++
 3 files changed, 5 insertions(+), 1 deletion(-)

diff --git a/erts/emulator/beam/erl_alloc.c b/erts/emulator/beam/erl_alloc.c
index f88a1adaff..2cea68a817 100644
--- a/erts/emulator/beam/erl_alloc.c
+++ b/erts/emulator/beam/erl_alloc.c
@@ -404,6 +404,7 @@ set_default_ets_alloc_opts(struct au_init *ip)
     ip->init.util.name_prefix	= "ets_";
     ip->init.util.alloc_no	= ERTS_ALC_A_ETS;
     ip->init.util.cp            = ERTS_ALC_A_ETS;
+    ip->init.util.mmbc0         = 0;
 #ifndef SMALL_MEMORY
     ip->init.util.mmbcs 	= 128*1024; /* Main carrier size */
 #else
diff --git a/erts/emulator/beam/erl_alloc_util.c b/erts/emulator/beam/erl_alloc_util.c
index 06edf60857..ac3e9fe967 100644
--- a/erts/emulator/beam/erl_alloc_util.c
+++ b/erts/emulator/beam/erl_alloc_util.c
@@ -6915,7 +6915,7 @@ erts_alcu_start(Allctr_t *allctr, AllctrInit_t *init)
     }
 #endif
 
-    if (allctr->main_carrier_size) {
+    if (allctr->main_carrier_size && (allctr->ix != 0 || init->mmbc0)) {
 	Block_t *blk;
 
 	blk = create_carrier(allctr,
diff --git a/erts/emulator/beam/erl_alloc_util.h b/erts/emulator/beam/erl_alloc_util.h
index 402c57fa3e..359457913c 100644
--- a/erts/emulator/beam/erl_alloc_util.h
+++ b/erts/emulator/beam/erl_alloc_util.h
@@ -54,6 +54,7 @@ typedef struct {
     int ramv;
     int atags;
     int cp;
+    int mmbc0;     /* create main mbc for instance 0 */
     UWord sbct;
     UWord asbcst;
     UWord rsbcst;
@@ -113,6 +114,7 @@ typedef struct {
     0,			/* (bool)   ramv:   realloc always moves         */\
     0,			/* (bool)   atags:  tagged allocations           */\
     -1,		        /* (ix)     cp:     carrier pool                 */\
+    1,                  /* (bool)   mmbc0:  main mbc in instance 0       */\
     512*1024,		/* (bytes)  sbct:   sbc threshold                */\
     2*1024*2024,	/* (amount) asbcst: abs sbc shrink threshold     */\
     20,			/* (%)      rsbcst: rel sbc shrink threshold     */\
@@ -152,6 +154,7 @@ typedef struct {
     0,			/* (bool)   ramv:   realloc always moves         */\
     0,			/* (bool)   atags:  tagged allocations           */\
     -1,		        /* (ix)     cp:     carrier pool                 */\
+    1,                  /* (bool)   mmbc0:  main mbc in instance 0       */\
     64*1024,		/* (bytes)  sbct:   sbc threshold                */\
     2*1024*2024,	/* (amount) asbcst: abs sbc shrink threshold     */\
     20,			/* (%)      rsbcst: rel sbc shrink threshold     */\
-- 
2.26.2

openSUSE Build Service is sponsored by