Skip to content

Commit

Permalink
Fix SplitHTTP race condition when creating new sessions (#3533)
Browse files Browse the repository at this point in the history
Co-authored-by: nobody <[email protected]>
Co-authored-by: mmmray <[email protected]>
  • Loading branch information
3 people authored Jul 17, 2024
1 parent a7e198e commit 02cd3b8
Show file tree
Hide file tree
Showing 2 changed files with 13 additions and 1 deletion.
12 changes: 12 additions & 0 deletions transport/internet/splithttp/hub.go
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ type requestHandler struct {
host string
path string
ln *Listener
sessionMu *sync.Mutex
sessions sync.Map
localAddr gonet.TCPAddr
}
Expand Down Expand Up @@ -56,11 +57,21 @@ func (h *requestHandler) maybeReapSession(isFullyConnected *done.Instance, sessi
}

func (h *requestHandler) upsertSession(sessionId string) *httpSession {
// fast path
currentSessionAny, ok := h.sessions.Load(sessionId)
if ok {
return currentSessionAny.(*httpSession)
}

// slow path
h.sessionMu.Lock()
defer h.sessionMu.Unlock()

currentSessionAny, ok = h.sessions.Load(sessionId)
if ok {
return currentSessionAny.(*httpSession)
}

s := &httpSession{
uploadQueue: NewUploadQueue(int(2 * h.ln.config.GetNormalizedMaxConcurrentUploads())),
isFullyConnected: done.New(),
Expand Down Expand Up @@ -277,6 +288,7 @@ func ListenSH(ctx context.Context, address net.Address, port net.Port, streamSet
host: shSettings.Host,
path: shSettings.GetNormalizedPath(),
ln: l,
sessionMu: &sync.Mutex{},
sessions: sync.Map{},
localAddr: localAddr,
}
Expand Down
2 changes: 1 addition & 1 deletion transport/internet/splithttp/splithttp_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -63,8 +63,8 @@ func Test_listenSHAndDial(t *testing.T) {
}

common.Must(conn.Close())
<-time.After(time.Second * 5)
conn, err = Dial(ctx, net.TCPDestination(net.DomainAddress("localhost"), listenPort), streamSettings)

common.Must(err)
_, err = conn.Write([]byte("Test connection 2"))
common.Must(err)
Expand Down

0 comments on commit 02cd3b8

Please sign in to comment.