Skip to content

Commit a737d28

Browse files
committed
More gc
1 parent 8fa5848 commit a737d28

File tree

2 files changed

+18
-5
lines changed

2 files changed

+18
-5
lines changed

src/dump.c

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2348,7 +2348,8 @@ static void jl_insert_backedges(jl_array_t *list, jl_array_t *targets)
23482348
// map(enable, ((list[i] => targets[list[i + 1] .* 2]) for i in 1:2:length(list) if all(valids[list[i + 1]])))
23492349
size_t i, l = jl_array_len(list);
23502350
jl_array_t *valids = NULL;
2351-
JL_GC_PUSH1(&valids);
2351+
jl_value_t *loctag = NULL;
2352+
JL_GC_PUSH3(&valids, &_jl_debug_method_invalidation, &loctag);
23522353
jl_verify_edges(targets, &valids);
23532354
for (i = 0; i < l; i += 2) {
23542355
jl_method_instance_t *caller = (jl_method_instance_t*)jl_array_ptr_ref(list, i);
@@ -2388,7 +2389,9 @@ static void jl_insert_backedges(jl_array_t *list, jl_array_t *targets)
23882389
else {
23892390
if (_jl_debug_method_invalidation) {
23902391
jl_array_ptr_1d_push(_jl_debug_method_invalidation, (jl_value_t*)caller);
2391-
jl_array_ptr_1d_push(_jl_debug_method_invalidation, jl_cstr_to_string("insert_backedges"));
2392+
loctag = jl_cstr_to_string("insert_backedges");
2393+
jl_gc_wb(_jl_debug_method_invalidation, loctag);
2394+
jl_array_ptr_1d_push(_jl_debug_method_invalidation, loctag);
23922395
}
23932396
}
23942397
}

src/gf.c

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1502,8 +1502,13 @@ JL_DLLEXPORT jl_value_t *jl_debug_method_invalidation(int state)
15021502
static void invalidate_method_instance(jl_method_instance_t *replaced, size_t max_world, int depth)
15031503
{
15041504
if (_jl_debug_method_invalidation) {
1505+
jl_value_t *boxeddepth = NULL;
1506+
JL_GC_PUSH2(&_jl_debug_method_invalidation, boxeddepth);
15051507
jl_array_ptr_1d_push(_jl_debug_method_invalidation, (jl_value_t*)replaced);
1506-
jl_array_ptr_1d_push(_jl_debug_method_invalidation, jl_box_int32(depth));
1508+
boxeddepth = jl_box_int32(depth);
1509+
jl_array_ptr_1d_push(_jl_debug_method_invalidation, boxeddepth);
1510+
jl_gc_wb(_jl_debug_method_invalidation, boxeddepth);
1511+
JL_GC_POP();
15071512
}
15081513
if (!jl_is_method(replaced->def.method))
15091514
return; // shouldn't happen, but better to be safe
@@ -1631,8 +1636,13 @@ static int invalidate_mt_cache(jl_typemap_entry_t *oldentry, void *closure0)
16311636
}
16321637
if (intersects) {
16331638
if (_jl_debug_method_invalidation) {
1639+
jl_value_t *loctag = NULL;
1640+
JL_GC_PUSH2(&_jl_debug_method_invalidation, &loctag);
16341641
jl_array_ptr_1d_push(_jl_debug_method_invalidation, (jl_value_t*)mi);
1635-
jl_array_ptr_1d_push(_jl_debug_method_invalidation, jl_cstr_to_string("mt"));
1642+
loctag = jl_cstr_to_string("mt");
1643+
jl_gc_wb(_jl_debug_method_invalidation, loctag);
1644+
jl_array_ptr_1d_push(_jl_debug_method_invalidation, loctag);
1645+
JL_GC_POP();
16361646
}
16371647
oldentry->max_world = env->max_world;
16381648
}
@@ -1700,7 +1710,7 @@ JL_DLLEXPORT void jl_method_table_insert(jl_methtable_t *mt, jl_method_t *method
17001710
method->primary_world = ++jl_world_counter;
17011711
size_t max_world = method->primary_world - 1;
17021712
int invalidated = 0;
1703-
JL_GC_PUSH1(&oldvalue);
1713+
JL_GC_PUSH2(&oldvalue, &_jl_debug_method_invalidation);
17041714
JL_LOCK(&mt->writelock);
17051715
// first delete the existing entry (we'll disable it later)
17061716
struct jl_typemap_assoc search = {(jl_value_t*)type, method->primary_world, NULL, 0, ~(size_t)0};

0 commit comments

Comments
 (0)