@@ -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