Skip to content

Commit 0001fd2

Browse files
committed
call _cancel_finalizer a bit earlier
1 parent e4af500 commit 0001fd2

File tree

1 file changed

+8
-7
lines changed

1 file changed

+8
-7
lines changed

base/compiler/ssair/passes.jl

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1677,6 +1677,13 @@ function try_resolve_finalizer!(ir::IRCode, alloc_idx::Int, finalizer_idx::Int,
16771677
attach_after = insert_idx !== nothing
16781678
flag = info isa FinalizerInfo ? flags_for_effects(info.effects) : IR_FLAG_NULL
16791679
alloc_obj = finalizer_stmt.args[3]
1680+
cancel_registration = current_task_ssa !== nothing
1681+
if cancel_registration
1682+
lookup_idx_ssa = SSAValue(finalizer_idx)
1683+
finalize_call = Expr(:call, GlobalRef(Core, :_cancel_finalizer), alloc_obj, current_task_ssa, lookup_idx_ssa)
1684+
newinst = add_flag(NewInstruction(finalize_call, Nothing), flag)
1685+
insert_node!(ir, loc, newinst, attach_after)
1686+
end
16801687
argexprs = Any[finalizer_stmt.args[2], alloc_obj]
16811688
if length(finalizer_stmt.args) >= 4
16821689
inline = finalizer_stmt.args[4]
@@ -1695,13 +1702,7 @@ function try_resolve_finalizer!(ir::IRCode, alloc_idx::Int, finalizer_idx::Int,
16951702
newinst = add_flag(NewInstruction(Expr(:call, argexprs...), Nothing), flag)
16961703
insert_node!(ir, loc, newinst, attach_after)
16971704
end
1698-
cancel_registration = current_task_ssa !== nothing
1699-
if cancel_registration
1700-
lookup_idx_ssa = SSAValue(finalizer_idx)
1701-
finalize_call = Expr(:call, GlobalRef(Core, :_cancel_finalizer), alloc_obj, current_task_ssa, lookup_idx_ssa)
1702-
newinst = add_flag(NewInstruction(finalize_call, Nothing), flag)
1703-
insert_node!(ir, loc, newinst, #=attach_after=#true)
1704-
else
1705+
if !cancel_registration
17051706
# Erase the call to `finalizer`
17061707
ir[SSAValue(finalizer_idx)][:stmt] = nothing
17071708
end

0 commit comments

Comments
 (0)