security: check for channel closures to prevent busy-loops.

Move notice observer before channel send.
This commit is contained in:
Jay
2026-08-09 18:56:36 -04:00
parent 3d20e9c512
commit 8ed9efa433
3 changed files with 24 additions and 9 deletions
+8 -2
View File
@@ -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 = ""
+8 -5
View File
@@ -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
View File
@@ -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()