Skip to content

Commit

Permalink
Remove most of the tls getter call in the GC
Browse files Browse the repository at this point in the history
  • Loading branch information
yuyichao committed Jul 3, 2016
1 parent ecdf5e7 commit ffd9c76
Show file tree
Hide file tree
Showing 5 changed files with 156 additions and 143 deletions.
3 changes: 2 additions & 1 deletion base/base.jl
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,8 @@ function finalizer{T}(o::T, f::Ptr{Void})
Core.getptls(), o, f)
end

finalize(o::ANY) = ccall(:jl_finalize, Void, (Any,), o)
finalize(o::ANY) = ccall(:jl_finalize_th, Void, (Ptr{Void}, Any,),
Core.getptls(), o)

gc(full::Bool=true) = ccall(:jl_gc_collect, Void, (Cint,), full)
gc_enable(on::Bool) = ccall(:jl_gc_enable, Cint, (Cint,), on)!=0
Expand Down
26 changes: 13 additions & 13 deletions src/gc-debug.c
Original file line number Diff line number Diff line change
Expand Up @@ -164,20 +164,20 @@ static void restore(void)
}
}

static void gc_verify_track(void)
static void gc_verify_track(jl_ptls_t ptls)
{
do {
arraylist_push(&lostval_parents_done, lostval);
jl_printf(JL_STDERR, "Now looking for %p =======\n", lostval);
clear_mark(GC_CLEAN);
pre_mark();
gc_mark_object_list(&to_finalize, 0);
pre_mark(ptls);
gc_mark_object_list(ptls, &to_finalize, 0);
for (int i = 0;i < jl_n_threads;i++) {
jl_ptls_t ptls2 = jl_all_tls_states[i];
gc_mark_object_list(&ptls2->finalizers, 0);
gc_mark_object_list(ptls, &ptls2->finalizers, 0);
}
gc_mark_object_list(&finalizer_list_marked, 0);
visit_mark_stack();
gc_mark_object_list(ptls, &finalizer_list_marked, 0);
visit_mark_stack(ptls);
if (lostval_parents.len == 0) {
jl_printf(JL_STDERR, "Could not find the missing link. We missed a toplevel root. This is odd.\n");
break;
Expand Down Expand Up @@ -209,21 +209,21 @@ static void gc_verify_track(void)
} while(lostval != NULL);
}

void gc_verify(void)
void gc_verify(jl_ptls_t ptls)
{
lostval = NULL;
lostval_parents.len = 0;
lostval_parents_done.len = 0;
clear_mark(GC_CLEAN);
gc_verifying = 1;
pre_mark();
gc_mark_object_list(&to_finalize, 0);
pre_mark(ptls);
gc_mark_object_list(ptls, &to_finalize, 0);
for (int i = 0;i < jl_n_threads;i++) {
jl_ptls_t ptls2 = jl_all_tls_states[i];
gc_mark_object_list(&ptls2->finalizers, 0);
gc_mark_object_list(ptls, &ptls2->finalizers, 0);
}
gc_mark_object_list(&finalizer_list_marked, 0);
visit_mark_stack();
gc_mark_object_list(ptls, &finalizer_list_marked, 0);
visit_mark_stack(ptls);
int clean_len = bits_save[GC_CLEAN].len;
for(int i = 0; i < clean_len + bits_save[GC_OLD].len; i++) {
jl_taggedvalue_t *v = (jl_taggedvalue_t*)bits_save[i >= clean_len ? GC_OLD : GC_CLEAN].items[i >= clean_len ? i - clean_len : i];
Expand All @@ -243,7 +243,7 @@ void gc_verify(void)
return;
}
restore();
gc_verify_track();
gc_verify_track(ptls);
gc_debug_print_status();
gc_debug_critical_error();
abort();
Expand Down
Loading

0 comments on commit ffd9c76

Please sign in to comment.