From 7cf53240c20ffb72d0ef9c409bf0f75b6826b065 Mon Sep 17 00:00:00 2001 From: Levi Date: Tue, 10 Nov 2026 09:33:27 +0800 Subject: [PATCH] fix(engine): allow JS resource cleanup after interrupting execution --- pkg/download/engine/engine.go | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/pkg/download/engine/engine.go b/pkg/download/engine/engine.go index 390fe6dd..1deb92ca 100644 --- a/pkg/download/engine/engine.go +++ b/pkg/download/engine/engine.go @@ -174,6 +174,15 @@ func (e *Engine) Close() { e.closeOnce.Do(func() { close(e.done) e.Runtime.Interrupt(ErrClosed) + // Wait for interrupted JS to leave the loop, then allow cleanup hooks + // to execute their JS cancellation callbacks before terminating it. + cleared := make(chan struct{}) + if e.loop.RunOnLoop(func(runtime *goja.Runtime) { + runtime.ClearInterrupt() + close(cleared) + }) { + <-cleared + } e.cleanupMu.Lock() cleanups := e.cleanups e.cleanups = nil