@@ -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 {
@@ -4024,7 +4028,7 @@ JL_DLLEXPORT jl_value_t *jl_gc_internal_obj_base_ptr(void *p)
4024
4028
jl_gc_pool_t * pool =
4025
4029
gc_all_tls_states [meta -> thread_n ]-> heap .norm_pools +
4026
4030
meta -> pool_n ;
4027
- if (meta -> fl_begin_offset == ( uint16_t ) -1 ) {
4031
+ if (meta -> fl_begin_offset == UINT16_MAX ) {
4028
4032
// case 2: this is a page on the newpages list
4029
4033
jl_taggedvalue_t * newpages = pool -> newpages ;
4030
4034
// Check if the page is being allocated from via newpages
@@ -4066,8 +4070,18 @@ JL_DLLEXPORT jl_value_t *jl_gc_internal_obj_base_ptr(void *p)
4066
4070
// before the freelist pointer was either live during the last
4067
4071
// sweep or has been allocated since.
4068
4072
if (gc_page_data (cell ) == gc_page_data (pool -> freelist )
4069
- && (char * )cell < (char * )pool -> freelist )
4073
+ && (char * )cell < (char * )pool -> freelist ) {
4070
4074
goto valid_object ;
4075
+ }
4076
+ else {
4077
+ jl_taggedvalue_t * v = pool -> freelist ;
4078
+ while (v != NULL ) {
4079
+ if (v == cell ) {
4080
+ return NULL ;
4081
+ }
4082
+ v = v -> next ;
4083
+ }
4084
+ }
4071
4085
// Not a freelist entry, therefore a valid object.
4072
4086
valid_object :
4073
4087
// We have to treat objects with type `jl_buff_tag` differently,
0 commit comments