File 2724-write_concurrency-auto-Fix-missing-destroy-of-old-lo.patch of Package erlang

From 5ca4de5cc4d34e57eac904390f33f3ad8c69e127 Mon Sep 17 00:00:00 2001
From: Kjell Winblad <kjellwinblad@gmail.com>
Date: Wed, 22 Sep 2021 10:22:10 +0200
Subject: [PATCH 4/8] {write_concurrency, auto}: Fix missing destroy of old
 lock array

---
 erts/emulator/beam/erl_db_hash.c | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/erts/emulator/beam/erl_db_hash.c b/erts/emulator/beam/erl_db_hash.c
index 56e5729867..fd79dd3344 100644
--- a/erts/emulator/beam/erl_db_hash.c
+++ b/erts/emulator/beam/erl_db_hash.c
@@ -395,12 +395,15 @@ void erl_db_hash_adapt_no_locks(DbTable* tb) {
             ERTS_ASSERT(total_new == total_old);
         }
 #endif
-        erts_db_free(ERTS_ALC_T_DB_SEG, tb, old_locks, sizeof(DbTableHashFineLockSlot) * old_no_locks);
 
         calc_shrink_limit(tbl);
 
         erts_atomic_set_nob(&tbl->lock_array_resize_state, DB_HASH_LOCK_ARRAY_RESIZE_STATUS_NORMAL);
         erts_rwmtx_rwunlock(&tb->common.rwlock);
+        for (i = 0; i < old_no_locks; i++) {
+            erts_rwmtx_destroy(&old_locks[i].u.lck_ctr.lck);
+        }
+        erts_db_free(ERTS_ALC_T_DB_SEG, tb, old_locks, sizeof(DbTableHashFineLockSlot) * old_no_locks);
     }
 }
 
-- 
2.31.1

openSUSE Build Service is sponsored by