Files
tinygo/testdata/finalizerlarge.go
T
Felipe Gené 31fff2c9a3 runtime: run syscall/js finalizers on wasm without a manual GC (#5545)
* runtime: run syscall/js finalizers on wasm without a manual GC

* runtime: address review feedback on finalizer idle GC

* runtime: clear a finished task's args pointer so its arguments are collectable

* runtime: skip the finalizer scan with a per-block registration bit

* runtime: guard the finalizer registration bitmap with gcLock

* testdata: cover finalizer invariants on every scheduler

* main_test: limit the finalizer scheduler variants to linux and darwin

* testdata: wait for the finalizer queue to drain before asserting

* testdata: make the finalizer counters atomic and wait for a known drain count

* runtime: add finalizer bookkeeping asserts under runtime_asserts

* runtime: address finalizer GC review feedback

* testdata: strengthen blocked stack finalizer test

* runtime: fix finalizer cleanup edge cases

* runtime: decouple wasm export scheduling from finalizers

* runtime: avoid redundant wakeups for re-entrant wasm exports

* runtime: simplify finalizer comments
2026-08-26 20:03:44 +02:00

30 lines
500 B
Go

package main
import "runtime"
type largeFinalizerObject struct {
data [128]byte
}
var largeFinalizerRan bool
//go:noinline
func registerLargeFinalizer() {
p := new(largeFinalizerObject)
runtime.SetFinalizer(p, func(*largeFinalizerObject) {
largeFinalizerRan = true
})
}
func main() {
registerLargeFinalizer()
for i := 0; i < 100 && !largeFinalizerRan; i++ {
runtime.GC()
runtime.Gosched()
}
if !largeFinalizerRan {
panic("large object finalizer did not run")
}
println("ok")
}