Skip to content

Commit 4e3af2f

Browse files
authored
Merge pull request #164 from bennyz/router-memory-leak
router: cleanup pending entries once exporter and client are connected
2 parents be69032 + e674da7 commit 4e3af2f

1 file changed

Lines changed: 8 additions & 3 deletions

File tree

controller/internal/service/router_service.go

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -92,17 +92,22 @@ func (s *RouterService) Stream(stream pb.RouterService_StreamServer) error {
9292
ctx, cancel := context.WithCancel(ctx)
9393
defer cancel()
9494

95-
sctx := streamContext{
95+
sctx := &streamContext{
9696
cancel: cancel,
9797
stream: stream,
9898
}
9999

100100
actual, loaded := s.pending.LoadOrStore(streamName, sctx)
101101
if loaded {
102-
defer actual.(streamContext).cancel()
102+
// peer connected - clean up
103+
first := actual.(*streamContext)
104+
s.pending.CompareAndDelete(streamName, first)
105+
defer first.cancel()
103106
logger.Info("forwarding", "stream", streamName)
104-
return Forward(ctx, stream, actual.(streamContext).stream)
107+
return Forward(ctx, stream, first.stream)
105108
} else {
109+
// First peer - wait for second peer before cleaning up
110+
defer s.pending.CompareAndDelete(streamName, sctx)
106111
logger.Info("waiting for the other side", "stream", streamName)
107112
<-ctx.Done()
108113
return nil

0 commit comments

Comments
 (0)