Skip to content

Commit f57883a

Browse files
committed
Update.
1 parent 7cbac39 commit f57883a

File tree

1 file changed

+11
-3
lines changed

1 file changed

+11
-3
lines changed

service/rpc/server.go

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -284,15 +284,20 @@ func (s *ServerHandler) RequestTask(h *pb.Host, stream pb.ServerService_RequestT
284284
ctx, cancel := context.WithTimeout(stream.Context(), 1*time.Minute) // 从2分钟缩短到1分钟
285285
defer cancel()
286286

287+
// 使用sync.Once确保done channel只被关闭一次
288+
var doneOnce sync.Once
289+
287290
// 监听连接状态,当连接断开时自动清理
288291
go func() {
289292
defer func() {
290293
// 确保监控goroutine退出时进行最终清理
291294
if r := recover(); r != nil {
292295
log.Printf("RequestTask监控goroutine panic恢复: %v", r)
293296
}
294-
// 确保done channel被关闭,通知主goroutine
295-
close(done)
297+
// 安全地关闭done channel,只关闭一次
298+
doneOnce.Do(func() {
299+
close(done)
300+
})
296301
}()
297302

298303
// 使用定时器避免无限等待,增加检查间隔减少CPU占用
@@ -341,7 +346,10 @@ func (s *ServerHandler) RequestTask(h *pb.Host, stream pb.ServerService_RequestT
341346
}()
342347

343348
defer func() {
344-
close(done) // 确保监控goroutine被通知停止
349+
// 安全地关闭done channel,只关闭一次
350+
doneOnce.Do(func() {
351+
close(done)
352+
})
345353
// 额外的清理工作确保资源释放
346354
singleton.ServerLock.RLock()
347355
if singleton.ServerList[clientID] != nil {

0 commit comments

Comments
 (0)