Skip to content

Commit 3bb9b52

Browse files
committed
perf(ssu2): reuse session path control buffer
1 parent 5a52456 commit 3bb9b52

1 file changed

Lines changed: 13 additions & 4 deletions

File tree

networking/internal/router/ssu2_manager.go

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3051,8 +3051,10 @@ func (m *SSU2Manager) handleDataFrom(session *ssu2TransportSession, packet []byt
30513051
if err != nil {
30523052
return
30533053
}
3054-
response, _ := ssu2.MarshalPathResponseBlock(nil, ssu2.PathResponse{Data: challenge.Data})
3054+
session.frameMu.Lock()
3055+
response, _ := ssu2.MarshalPathResponseBlock(session.frame[:0], ssu2.PathResponse{Data: challenge.Data})
30553056
_ = m.sendSessionData(session, response, false)
3057+
session.frameMu.Unlock()
30563058
case ssu2.BlockPathResponse:
30573059
ackEliciting = true
30583060
case ssu2.BlockAddress, ssu2.BlockDateTime, ssu2.BlockPadding:
@@ -3108,8 +3110,13 @@ func (m *SSU2Manager) handleCandidatePath(session *ssu2TransportSession, payload
31083110
challenge := current.challenge
31093111
session.pathMu.Unlock()
31103112

3111-
probe, err := ssu2.MarshalPathChallengeBlock(nil, ssu2.PathChallenge{Data: challenge})
3112-
if err != nil || m.sendSessionDataTo(session, candidate, probe) != nil {
3113+
session.frameMu.Lock()
3114+
probe, err := ssu2.MarshalPathChallengeBlock(session.frame[:0], ssu2.PathChallenge{Data: challenge})
3115+
if err == nil {
3116+
err = m.sendSessionDataTo(session, candidate, probe)
3117+
}
3118+
session.frameMu.Unlock()
3119+
if err != nil {
31133120
return
31143121
}
31153122
iterator := ssu2.NewBlockIterator(payload)
@@ -3124,8 +3131,10 @@ func (m *SSU2Manager) handleCandidatePath(session *ssu2TransportSession, payload
31243131
if err != nil {
31253132
return
31263133
}
3127-
response, _ := ssu2.MarshalPathResponseBlock(nil, ssu2.PathResponse{Data: request.Data})
3134+
session.frameMu.Lock()
3135+
response, _ := ssu2.MarshalPathResponseBlock(session.frame[:0], ssu2.PathResponse{Data: request.Data})
31283136
_ = m.sendSessionDataTo(session, candidate, response)
3137+
session.frameMu.Unlock()
31293138
case ssu2.BlockPathResponse:
31303139
response, err := ssu2.ParsePathResponseBlock(block.Data)
31313140
if err != nil {

0 commit comments

Comments
 (0)