fix: 热重载时 nil pointer panic — ReadMessages 中 Disconnect 与错误处理竞态
热重载流程:ReplaceAdapter → old.Disconnect() 将 a.conn 置 nil → 旧的 ReadMessages goroutine 中 conn.ReadMessage() 因连接关闭返回错误 → 错误处理中 a.conn.Close() 对 nil 指针调用导致 panic。 修复:Close 前检查 a.conn != nil。 Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
@@ -445,8 +445,10 @@ func (a *Adapter) ReadMessages(ctx context.Context, msgCh chan<- *OBv11Message)
|
||||
if err != nil {
|
||||
fmt.Printf("[qq] read error: %v\n", err)
|
||||
a.connMu.Lock()
|
||||
a.conn.Close()
|
||||
a.conn = nil
|
||||
if a.conn != nil {
|
||||
a.conn.Close()
|
||||
a.conn = nil
|
||||
}
|
||||
a.connected = false
|
||||
a.connMu.Unlock()
|
||||
time.Sleep(time.Second)
|
||||
|
||||
Reference in New Issue
Block a user