From 5fbe9789faf05ce99bbff6ec4cd0b905519acbd0 Mon Sep 17 00:00:00 2001
From: Ariver <shanghai3168@gmail.com>
Date: Fri, 03 Jul 2026 05:18:07 +0800
Subject: [PATCH] Freeze R221 2.2.2 source baseline

---
 C1.source/privatevoice.src/internal/overlay/overlay_windows.go |   21 ++++++++++++++-------
 1 files changed, 14 insertions(+), 7 deletions(-)

diff --git a/C1.source/privatevoice.src/internal/overlay/overlay_windows.go b/C1.source/privatevoice.src/internal/overlay/overlay_windows.go
index b19d38e..3cbaa3f 100755
--- a/C1.source/privatevoice.src/internal/overlay/overlay_windows.go
+++ b/C1.source/privatevoice.src/internal/overlay/overlay_windows.go
@@ -5,6 +5,7 @@
 import (
 	"math"
 	"runtime"
+	"sync"
 	"syscall"
 	"time"
 	"unsafe"
@@ -257,12 +258,13 @@
 }
 
 type winOverlay struct {
-	showCh   chan bool
-	statusCh chan statusCmd
-	volCh    chan float64
-	posCh    chan [2]int
-	closeCh  chan struct{}
-	done     chan struct{}
+	showCh    chan bool
+	statusCh  chan statusCmd
+	volCh     chan float64
+	posCh     chan [2]int
+	closeCh   chan struct{}
+	done      chan struct{}
+	closeOnce sync.Once
 
 	barHeights [nBars]float64
 	animTime   float64
@@ -307,7 +309,12 @@
 func (o *winOverlay) GetPosition() (int, int)         { return o.posX, o.posY }
 func (o *winOverlay) Size() (int, int)                { return capW, capH }
 func (o *winOverlay) OnDragged(fn func(x, y int))     { o.dragCb = fn }
-func (o *winOverlay) Close()                          { close(o.closeCh); <-o.done }
+func (o *winOverlay) Close() {
+	o.closeOnce.Do(func() {
+		close(o.closeCh)
+	})
+	<-o.done
+}
 
 func trySend(ch chan bool, v bool) {
 	select {

--
Gitblit v1.9.3