Skip to content

Commit

Permalink
Add safty check for record_external_fns
Browse files Browse the repository at this point in the history
  • Loading branch information
vchuravy committed Oct 18, 2022
1 parent 112c66b commit 5930d05
Showing 1 changed file with 19 additions and 1 deletion.
20 changes: 19 additions & 1 deletion src/staticdata.c
Original file line number Diff line number Diff line change
Expand Up @@ -1032,6 +1032,24 @@ static void record_gvars(jl_serializer_state *s, arraylist_t *globals) JL_NOTSAF
}
}

static void record_external_fns(jl_serializer_state *s, arraylist_t *external_fns) JL_NOTSAFEPOINT
{
if (!s->incremental) {
assert(external_fns->len == 0);
(void) external_fns;
return;
}

// We could call jl_queue_for_serialization here, but that should
// always be a no-op.
#if defined(JL_NDEBUG)
for (size_t i = 0; i < external_fns->len; i++) {
jl_code_instance_t *ci = (jl_code_instance_t*)external_fns->data[i];
assert(jl_object_in_image((jl_value_t*)ci));
}
#endif
}

jl_value_t *jl_find_ptr = NULL;
// The main function for serializing all the items queued in `visited`
static void jl_write_values(jl_serializer_state *s) JL_GC_DISABLED
Expand Down Expand Up @@ -2309,7 +2327,7 @@ static void jl_save_system_image_to_stream(ios_t *f,
jl_serialize_reachable(&s);
// step 1.2: now that we have marked all bindings (badly), ensure all gvars are part of the sysimage
record_gvars(&s, &gvars);
// TODO record external_fns?
record_external_fns(&s, &external_fns);
jl_serialize_reachable(&s);
// step 1.3: prune (garbage collect) some special weak references from
// built-in type caches
Expand Down

0 comments on commit 5930d05

Please sign in to comment.