@@ -506,6 +506,9 @@ JL_DLLEXPORT void jl_gc_scan_vm_specific_roots(RootsWorkClosure* closure)
506
506
// add module
507
507
add_node_to_roots_buffer (closure , & buf , & len , jl_main_module );
508
508
509
+ // add global_method_table
510
+ add_node_to_roots_buffer (closure , & buf , & len , jl_method_table );
511
+
509
512
// buildin values
510
513
add_node_to_roots_buffer (closure , & buf , & len , jl_an_empty_vec_any );
511
514
add_node_to_roots_buffer (closure , & buf , & len , jl_module_init_order );
@@ -1019,30 +1022,29 @@ JL_DLLEXPORT void *jl_gc_counted_realloc_with_old_size(void *p, size_t old, size
1019
1022
return realloc (p , sz );
1020
1023
}
1021
1024
1022
- void * jl_gc_perm_alloc_nolock (size_t sz , int zero , unsigned align , unsigned offset )
1025
+ void * jl_gc_perm_alloc_nolock (jl_ptls_t ptls , size_t sz , int zero , unsigned align , unsigned offset )
1023
1026
{
1024
- jl_ptls_t ptls = jl_current_task -> ptls ;
1025
1027
size_t allocsz = mmtk_align_alloc_sz (sz );
1026
1028
void * addr = mmtk_immortal_alloc_fast (& ptls -> gc_tls .mmtk_mutator , allocsz , align , offset );
1027
1029
return addr ;
1028
1030
}
1029
1031
1030
1032
void * jl_gc_perm_alloc (size_t sz , int zero , unsigned align , unsigned offset )
1031
1033
{
1032
- return jl_gc_perm_alloc_nolock (sz , zero , align , offset );
1034
+ jl_ptls_t ptls = jl_current_task -> ptls ;
1035
+ return jl_gc_perm_alloc_nolock (ptls , sz , zero , align , offset );
1033
1036
}
1034
1037
1035
- jl_value_t * jl_gc_permobj (size_t sz , void * ty , unsigned align ) JL_NOTSAFEPOINT
1038
+ jl_value_t * jl_gc_permobj (jl_ptls_t ptls , size_t sz , void * ty , unsigned align ) JL_NOTSAFEPOINT
1036
1039
{
1037
1040
const size_t allocsz = sz + sizeof (jl_taggedvalue_t );
1038
1041
if (align == 0 ) {
1039
1042
align = ((sz == 0 ) ? sizeof (void * ) : (allocsz <= sizeof (void * ) * 2 ?
1040
1043
sizeof (void * ) * 2 : 16 ));
1041
1044
}
1042
- jl_taggedvalue_t * o = (jl_taggedvalue_t * )jl_gc_perm_alloc ( allocsz , 0 , align ,
1045
+ jl_taggedvalue_t * o = (jl_taggedvalue_t * )jl_gc_perm_alloc_nolock ( ptls , allocsz , 0 , align ,
1043
1046
sizeof (void * ) % align );
1044
1047
1045
- jl_ptls_t ptls = jl_current_task -> ptls ;
1046
1048
mmtk_immortal_post_alloc_fast (& ptls -> gc_tls .mmtk_mutator , jl_valueof (o ), allocsz );
1047
1049
o -> header = (uintptr_t )ty ;
1048
1050
return jl_valueof (o );
0 commit comments