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:
+12
-9
@@ -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 {
|
||||||
|
|||||||
Reference in New Issue
Block a user