Skip to content

Commit 6bf8f9e

Browse files
committed
Add test for calling finalize in a finalizer
1 parent 1bc243d commit 6bf8f9e

File tree

1 file changed

+24
-0
lines changed

1 file changed

+24
-0
lines changed

test/core.jl

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3503,3 +3503,27 @@ let
35033503
finalize(obj)
35043504
@test finalized == 1
35053505
end
3506+
3507+
# check if finalizers for the old gen can be triggered manually
3508+
# PR #14181
3509+
let
3510+
# The following three `gc(false)` clears the `finalizer_list`. It is
3511+
# not strictly necessary to make the test pass but should make the failure
3512+
# more repeatable if something breaks.
3513+
gc(false)
3514+
# At least: GC_CLEAN; age = 1
3515+
gc(false)
3516+
# At least: GC_QUEUED; age = 1
3517+
gc(false)
3518+
# all objects in `finalizer_list` are now moved to `finalizer_list_marked`
3519+
3520+
obj1 = Ref(1)
3521+
obj2 = Ref(1)
3522+
finalized = 0
3523+
finalizer(obj1, (obj) -> (finalized += 1))
3524+
finalizer(obj1, (obj) -> (finalized += 1))
3525+
finalizer(obj2, (obj) -> (finalized += 1; finalize(obj1)))
3526+
finalizer(obj2, (obj) -> (finalized += 1; finalize(obj1)))
3527+
finalize(obj2)
3528+
@test finalized == 4
3529+
end

0 commit comments

Comments
 (0)