@@ -1242,7 +1242,10 @@ static NOINLINE jl_taggedvalue_t *gc_add_page(jl_gc_pool_t *p) JL_NOTSAFEPOINT
1242
1242
// in pool_alloc significantly
1243
1243
jl_ptls_t ptls = jl_current_task -> ptls ;
1244
1244
jl_gc_pagemeta_t * pg = pop_page_metadata_back (& ptls -> page_metadata_lazily_freed );
1245
- if (pg == NULL ) {
1245
+ if (pg != NULL ) {
1246
+ gc_alloc_map_set (pg -> data , GC_PAGE_ALLOCATED );
1247
+ }
1248
+ else {
1246
1249
pg = jl_gc_alloc_page ();
1247
1250
}
1248
1251
pg -> osize = p -> osize ;
@@ -1449,6 +1452,7 @@ static jl_taggedvalue_t **gc_sweep_page(jl_gc_pool_t *p, jl_gc_pagemeta_t **allo
1449
1452
push_page_metadata_back (allocd , pg );
1450
1453
}
1451
1454
else if (freed_lazily ) {
1455
+ gc_alloc_map_set (pg -> data , GC_PAGE_LAZILY_FREED );
1452
1456
push_page_metadata_back (lazily_freed , pg );
1453
1457
}
1454
1458
else {
@@ -4027,7 +4031,7 @@ JL_DLLEXPORT jl_value_t *jl_gc_internal_obj_base_ptr(void *p)
4027
4031
jl_gc_pool_t * pool =
4028
4032
gc_all_tls_states [meta -> thread_n ]-> heap .norm_pools +
4029
4033
meta -> pool_n ;
4030
- if (meta -> fl_begin_offset == ( uint16_t ) -1 ) {
4034
+ if (meta -> fl_begin_offset == UINT16_MAX ) {
4031
4035
// case 2: this is a page on the newpages list
4032
4036
jl_taggedvalue_t * newpages = pool -> newpages ;
4033
4037
// Check if the page is being allocated from via newpages
@@ -4069,8 +4073,18 @@ JL_DLLEXPORT jl_value_t *jl_gc_internal_obj_base_ptr(void *p)
4069
4073
// before the freelist pointer was either live during the last
4070
4074
// sweep or has been allocated since.
4071
4075
if (gc_page_data (cell ) == gc_page_data (pool -> freelist )
4072
- && (char * )cell < (char * )pool -> freelist )
4076
+ && (char * )cell < (char * )pool -> freelist ) {
4073
4077
goto valid_object ;
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
+ }
4074
4088
// Not a freelist entry, therefore a valid object.
4075
4089
valid_object :
4076
4090
// We have to treat objects with type `jl_buff_tag` differently,
0 commit comments