@ 261102.1

260720.1 · dc384afb7035e86baeb1da85eced7a9b8d4f3c54

Terminate resize notification when Loop exits

- Pass Loop context to notifyOnResize
- Windows: stop polling goroutine, close CONOUT$ handle on ctx.Done
- Unix: unregister SIGWINCH handler on ctx.Done

reading declarations

Changes to src/terminal_windows.go. All files

src/terminal_windows.go

@@ -3,6 +3,7 @@ package fzf  import (+	"context" 	"os" 	"syscall" 	"time"@@ -19,19 +20,27 @@ func (resizeSignal) Signal()        {}  // Windows has no SIGWINCH, so poll the console screen buffer for window // size changes instead.-func notifyOnResize(resizeChan chan<- os.Signal) {+func notifyOnResize(ctx context.Context, resizeChan chan<- os.Signal) { 	consoleOut, err := syscall.Open("CONOUT$", syscall.O_RDWR, 0) 	if err != nil { 		return 	} 	var info windows.ConsoleScreenBufferInfo 	if windows.GetConsoleScreenBufferInfo(windows.Handle(consoleOut), &info) != nil {+		syscall.Close(consoleOut) 		return 	} 	last := info.Window 	go func() {+		defer syscall.Close(consoleOut)+		ticker := time.NewTicker(resizePollInterval)+		defer ticker.Stop() 		for {-			time.Sleep(resizePollInterval)+			select {+			case <-ctx.Done():+				return+			case <-ticker.C:+			} 			if windows.GetConsoleScreenBufferInfo(windows.Handle(consoleOut), &info) != nil { 				continue 			}