Skip to content

Commit

Permalink
Fix GC rooting during rehashing of iddict (#52569)
Browse files Browse the repository at this point in the history
Should fix #52558. `a` should be rooted before the alloc call. I removed
the comment as it seemed to refer to a write barrier that was removed
long ago.
  • Loading branch information
Zentrik authored Dec 18, 2023
1 parent 2ab4105 commit 5977cb0
Showing 1 changed file with 2 additions and 3 deletions.
5 changes: 2 additions & 3 deletions src/iddict.c
Original file line number Diff line number Diff line change
Expand Up @@ -15,15 +15,14 @@ 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]);
// it is however necessary here because allocation
// can (and will) occur in a recursive call inside table_lookup_bp
}
}
JL_GC_POP();
Expand Down

0 comments on commit 5977cb0

Please sign in to comment.