From bd23ab925e61c79808ef6b805927c922efef02dd Mon Sep 17 00:00:00 2001 From: Zoltan Papp Date: Mon, 15 Sep 2025 15:08:53 +0200 Subject: [PATCH] [client] Fix ICE latency handling (#4501) The GetSelectedCandidatePair() does not carry the latency information. --- client/internal/peer/worker_ice.go | 23 ++++++++--------------- 1 file changed, 8 insertions(+), 15 deletions(-) diff --git a/client/internal/peer/worker_ice.go b/client/internal/peer/worker_ice.go index 4e85ba0fa..eb886a4d3 100644 --- a/client/internal/peer/worker_ice.go +++ b/client/internal/peer/worker_ice.go @@ -218,7 +218,9 @@ func (w *WorkerICE) reCreateAgent(dialerCancel context.CancelFunc, candidates [] return nil, err } - if err := agent.OnSelectedCandidatePairChange(w.onICESelectedCandidatePair); err != nil { + if err := agent.OnSelectedCandidatePairChange(func(c1, c2 ice.Candidate) { + w.onICESelectedCandidatePair(agent, c1, c2) + }); err != nil { return nil, err } @@ -365,26 +367,17 @@ func (w *WorkerICE) onICECandidate(candidate ice.Candidate) { }() } -func (w *WorkerICE) onICESelectedCandidatePair(c1 ice.Candidate, c2 ice.Candidate) { +func (w *WorkerICE) onICESelectedCandidatePair(agent *icemaker.ThreadSafeAgent, c1, c2 ice.Candidate) { w.log.Debugf("selected candidate pair [local <-> remote] -> [%s <-> %s], peer %s", c1.String(), c2.String(), w.config.Key) - w.muxAgent.Lock() - - pair, err := w.agent.GetSelectedCandidatePair() - if err != nil { - w.log.Warnf("failed to get selected candidate pair: %s", err) - w.muxAgent.Unlock() + pairStat, ok := agent.GetSelectedCandidatePairStats() + if !ok { + w.log.Warnf("failed to get selected candidate pair stats") return } - if pair == nil { - w.log.Warnf("selected candidate pair is nil, cannot proceed") - w.muxAgent.Unlock() - return - } - w.muxAgent.Unlock() - duration := time.Duration(pair.CurrentRoundTripTime() * float64(time.Second)) + duration := time.Duration(pairStat.CurrentRoundTripTime * float64(time.Second)) if err := w.statusRecorder.UpdateLatency(w.config.Key, duration); err != nil { w.log.Debugf("failed to update latency for peer: %s", err) return