security: check for channel closures to prevent busy-loops.
Move notice observer before channel send.
This commit is contained in:
@@ -74,7 +74,10 @@ func (m *AuthManager) routeInbox() {
|
|||||||
select {
|
select {
|
||||||
case <-m.ctx.Done():
|
case <-m.ctx.Done():
|
||||||
return
|
return
|
||||||
case msg := <-m.inbox:
|
case msg, ok := <-m.inbox:
|
||||||
|
if !ok {
|
||||||
|
return
|
||||||
|
}
|
||||||
challenge, err := envelope.FindAuthChallenge(msg.Data)
|
challenge, err := envelope.FindAuthChallenge(msg.Data)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
continue
|
continue
|
||||||
@@ -116,7 +119,10 @@ func (m *AuthManager) handleEvents() {
|
|||||||
select {
|
select {
|
||||||
case <-m.ctx.Done():
|
case <-m.ctx.Done():
|
||||||
return
|
return
|
||||||
case ev := <-m.events:
|
case ev, ok := <-m.events:
|
||||||
|
if !ok {
|
||||||
|
return
|
||||||
|
}
|
||||||
if ev.Kind == EventDisconnected {
|
if ev.Kind == EventDisconnected {
|
||||||
m.mu.Lock()
|
m.mu.Lock()
|
||||||
m.challenge = ""
|
m.challenge = ""
|
||||||
|
|||||||
@@ -55,21 +55,24 @@ func (h *NoticeHandler) route() {
|
|||||||
select {
|
select {
|
||||||
case <-h.ctx.Done():
|
case <-h.ctx.Done():
|
||||||
return
|
return
|
||||||
case msg := <-h.inbox:
|
case msg, ok := <-h.inbox:
|
||||||
|
if !ok {
|
||||||
|
return
|
||||||
|
}
|
||||||
message, err := envelope.FindNotice(msg.Data)
|
message, err := envelope.FindNotice(msg.Data)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
now := time.Now()
|
now := time.Now()
|
||||||
|
h.envoy.Observer().Record(msg.URL, NoticeReceived{
|
||||||
|
Message: message,
|
||||||
|
At: now,
|
||||||
|
})
|
||||||
h.notices <- Notice{
|
h.notices <- Notice{
|
||||||
Peer: msg.URL,
|
Peer: msg.URL,
|
||||||
Message: message,
|
Message: message,
|
||||||
Timestamp: now,
|
Timestamp: now,
|
||||||
}
|
}
|
||||||
h.envoy.Observer().Record(msg.URL, NoticeReceived{
|
|
||||||
Message: message,
|
|
||||||
At: now,
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+8
-2
@@ -170,7 +170,10 @@ func (p *EventPublisher) routeInbox() {
|
|||||||
select {
|
select {
|
||||||
case <-p.ctx.Done():
|
case <-p.ctx.Done():
|
||||||
return
|
return
|
||||||
case msg := <-p.inbox:
|
case msg, ok := <-p.inbox:
|
||||||
|
if !ok {
|
||||||
|
return
|
||||||
|
}
|
||||||
eventID, accepted, message, err := envelope.FindOK(msg.Data)
|
eventID, accepted, message, err := envelope.FindOK(msg.Data)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
continue
|
continue
|
||||||
@@ -204,7 +207,10 @@ func (p *EventPublisher) handleEvents() {
|
|||||||
select {
|
select {
|
||||||
case <-p.ctx.Done():
|
case <-p.ctx.Done():
|
||||||
return
|
return
|
||||||
case ev := <-p.events:
|
case ev, ok := <-p.events:
|
||||||
|
if !ok {
|
||||||
|
return
|
||||||
|
}
|
||||||
switch ev.Kind {
|
switch ev.Kind {
|
||||||
case EventConnected:
|
case EventConnected:
|
||||||
p.mu.Lock()
|
p.mu.Lock()
|
||||||
|
|||||||
Reference in New Issue
Block a user