From 37c1f141c42ebf3e13d53be1b4d0a61dc6441a64 Mon Sep 17 00:00:00 2001 From: Zentrik Date: Sun, 17 Dec 2023 15:19:45 +0000 Subject: [PATCH 1/2] Fix rooting when rehashing iddict --- src/iddict.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/iddict.c b/src/iddict.c index 8d17f172b91fe..0c7a93bafa371 100644 --- a/src/iddict.c +++ b/src/iddict.c @@ -15,10 +15,11 @@ JL_DLLEXPORT jl_genericmemory_t *jl_idtable_rehash(jl_genericmemory_t *a, size_t size_t sz = a->length; size_t i; jl_value_t **ol = (jl_value_t **) a->ptr; - jl_genericmemory_t *newa = jl_alloc_memory_any(newsz); + jl_genericmemory_t *newa = NULL; // keep the original memory in the original slot since we need `ol` // to be valid in the loop below. JL_GC_PUSH2(&newa, &a); + newa = jl_alloc_memory_any(newsz); for (i = 0; i < sz; i += 2) { if (ol[i + 1] != NULL) { jl_table_assign_bp(&newa, ol[i], ol[i + 1]); From 2967fed12f4c9271aa3d842429b12a47d0556c12 Mon Sep 17 00:00:00 2001 From: Zentrik Date: Sun, 17 Dec 2023 15:21:04 +0000 Subject: [PATCH 2/2] Remove old comment about inserting gc write barrier --- src/iddict.c | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/iddict.c b/src/iddict.c index 0c7a93bafa371..0a0895d048c32 100644 --- a/src/iddict.c +++ b/src/iddict.c @@ -23,8 +23,6 @@ JL_DLLEXPORT jl_genericmemory_t *jl_idtable_rehash(jl_genericmemory_t *a, size_t for (i = 0; i < sz; i += 2) { if (ol[i + 1] != NULL) { jl_table_assign_bp(&newa, ol[i], ol[i + 1]); - // it is however necessary here because allocation - // can (and will) occur in a recursive call inside table_lookup_bp } } JL_GC_POP();