make a copy of the event subs map because it may change during iteration.

Use consistent variable names for channels.
This commit is contained in:
Jay
2026-08-09 19:04:03 -04:00
parent 22b385f240
commit de1ec56c40
+12 -9
View File
@@ -396,12 +396,12 @@ func (e *Envoy) Dismiss() {
e.mu.Lock() e.mu.Lock()
defer e.mu.Unlock() defer e.mu.Unlock()
for _, sub := range e.eventSubs { for _, ch := range e.eventSubs {
close(sub) close(ch)
} }
for _, sub := range e.inboxSubs { for _, ch := range e.inboxSubs {
close(sub) close(ch)
} }
e.eventSubs = nil e.eventSubs = nil
@@ -416,7 +416,7 @@ func (e *Envoy) Send(data []byte) error {
func (e *Envoy) SubscribeEvents() <-chan PoolEvent { func (e *Envoy) SubscribeEvents() <-chan PoolEvent {
e.mu.Lock() e.mu.Lock()
defer e.mu.Unlock() defer e.mu.Unlock()
ch := make(chan PoolEvent) ch := make(chan PoolEvent, 64)
e.eventSubs = append(e.eventSubs, ch) e.eventSubs = append(e.eventSubs, ch)
return ch return ch
} }
@@ -424,8 +424,8 @@ func (e *Envoy) SubscribeEvents() <-chan PoolEvent {
func (e *Envoy) UnsubscribeEvents(ch <-chan PoolEvent) { func (e *Envoy) UnsubscribeEvents(ch <-chan PoolEvent) {
e.mu.Lock() e.mu.Lock()
defer e.mu.Unlock() defer e.mu.Unlock()
for i, sub := range e.eventSubs { for i, subCh := range e.eventSubs {
if sub == ch { if subCh == ch {
e.eventSubs[i] = e.eventSubs[len(e.eventSubs)-1] e.eventSubs[i] = e.eventSubs[len(e.eventSubs)-1]
e.eventSubs = e.eventSubs[:len(e.eventSubs)-1] e.eventSubs = e.eventSubs[:len(e.eventSubs)-1]
return return
@@ -436,7 +436,7 @@ func (e *Envoy) UnsubscribeEvents(ch <-chan PoolEvent) {
func (e *Envoy) SubscribeInbox(labels []string) <-chan InboxMessage { func (e *Envoy) SubscribeInbox(labels []string) <-chan InboxMessage {
e.mu.Lock() e.mu.Lock()
defer e.mu.Unlock() defer e.mu.Unlock()
ch := make(chan InboxMessage) ch := make(chan InboxMessage, 64)
e.inboxSubs = append(e.inboxSubs, ch) e.inboxSubs = append(e.inboxSubs, ch)
for _, label := range labels { for _, label := range labels {
if _, ok := e.labelledInboxSubs[label]; !ok { if _, ok := e.labelledInboxSubs[label]; !ok {
@@ -464,7 +464,10 @@ func (e *Envoy) publishEvents() {
case EventDisconnected: case EventDisconnected:
e.connected = false e.connected = false
} }
subs := e.eventSubs subs := make([]chan PoolEvent, 0, len(e.eventSubs))
for _, s := range e.eventSubs {
subs = append(subs, s)
}
e.mu.Unlock() e.mu.Unlock()
for _, ch := range subs { for _, ch := range subs {