Skip to content

Commit 554757d

Browse files
Diogo Nettod-netto
authored andcommitted
actually check whether obj is in freelist
1 parent e8f6d2d commit 554757d

File tree

1 file changed

+11
-3
lines changed

1 file changed

+11
-3
lines changed

src/gc.c

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4073,10 +4073,18 @@ JL_DLLEXPORT jl_value_t *jl_gc_internal_obj_base_ptr(void *p)
40734073
// before the freelist pointer was either live during the last
40744074
// sweep or has been allocated since.
40754075
if (gc_page_data(cell) == gc_page_data(pool->freelist)
4076-
&& (char *)cell < (char *)pool->freelist)
4076+
&& (char *)cell < (char *)pool->freelist) {
40774077
goto valid_object;
4078-
else
4079-
return NULL;
4078+
}
4079+
else {
4080+
jl_taggedvalue_t *v = pool->freelist;
4081+
while (v != NULL) {
4082+
if (v == cell) {
4083+
return NULL;
4084+
}
4085+
v = v->next;
4086+
}
4087+
}
40804088
// Not a freelist entry, therefore a valid object.
40814089
valid_object:
40824090
// We have to treat objects with type `jl_buff_tag` differently,

0 commit comments

Comments
 (0)