From 16fb4f7181455283a8a29faca716506be51f5aab Mon Sep 17 00:00:00 2001 From: Adrian Date: Thu, 18 Dec 2025 13:48:42 +0100 Subject: [PATCH] Update event.go --- event/event.go | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/event/event.go b/event/event.go index 25a2c2e4570e..fb792c598494 100644 --- a/event/event.go +++ b/event/event.go @@ -206,12 +206,24 @@ func (s *TypeMuxSubscription) deliver(event *TypeMuxEvent) { if s.created.After(event.Time) { return } - // Otherwise deliver the event + // Copy postC under lock, then release lock before blocking select s.postMu.RLock() - defer s.postMu.RUnlock() + postC := s.postC + s.postMu.RUnlock() - select { - case s.postC <- event: - case <-s.closing: + if postC == nil { + return } + + // Use recover to safely handle case where channel was closed + // between copying postC and entering select + func() { + defer func() { + recover() // Ignore panic from send on closed channel + }() + select { + case postC <- event: + case <-s.closing: + } + }() }