From 86b503955255849b4ac8c6d1beb443294f7deb32 Mon Sep 17 00:00:00 2001 From: Levi Neely Date: Wed, 19 Aug 2026 17:23:27 +0200 Subject: [PATCH] peers: clean up peer links when an agent is killed RemoveAgent now iterates remaining agents and removes any peer link pointing to the removed agent's name, preventing stale/corrupt state. --- cmd/olliesrv/internal/session/session.go | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/cmd/olliesrv/internal/session/session.go b/cmd/olliesrv/internal/session/session.go index 851cddd..662e2bb 100644 --- a/cmd/olliesrv/internal/session/session.go +++ b/cmd/olliesrv/internal/session/session.go @@ -296,11 +296,14 @@ func (s *Session) AddAgent(ag *agent.Agent) { } // RemoveAgent removes an agent by ID and closes it. +// Any peer relationships to this agent are cleaned up from remaining agents. func (s *Session) RemoveAgent(id string) bool { idx := -1 + var removed *agent.Agent for i, ag := range s.agents { if ag.ID() == id { idx = i + removed = ag break } } @@ -309,6 +312,12 @@ func (s *Session) RemoveAgent(id string) bool { } s.agents[idx].Close() s.agents = append(s.agents[:idx], s.agents[idx+1:]...) + + // Remove peer links pointing to the removed agent. + name := removed.Name() + for _, ag := range s.agents { + ag.RemovePeer(name) + } return true }