diff options
| author | 2023-10-15 14:34:07 +0200 | |
|---|---|---|
| committer | 2023-10-15 14:34:07 +0200 | |
| commit | 39e22a9703470b74fa1bdbed8fd6200818667276 (patch) | |
| tree | 707a907e16cd59cdbc4ba3340924d083baa50ca7 /vendor | |
| parent | [chore]: Bump golang.org/x/oauth2 from 0.12.0 to 0.13.0 (#2258) (diff) | |
| download | gotosocial-39e22a9703470b74fa1bdbed8fd6200818667276.tar.xz | |
[chore]: Bump golang.org/x/net from 0.16.0 to 0.17.0 (#2262)
Bumps [golang.org/x/net](https://github.com/golang/net) from 0.16.0 to 0.17.0.
- [Commits](https://github.com/golang/net/compare/v0.16.0...v0.17.0)
---
updated-dependencies:
- dependency-name: golang.org/x/net
  dependency-type: direct:production
...
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Diffstat (limited to 'vendor')
| -rw-r--r-- | vendor/golang.org/x/net/http2/server.go | 66 | ||||
| -rw-r--r-- | vendor/modules.txt | 2 | 
2 files changed, 65 insertions, 3 deletions
diff --git a/vendor/golang.org/x/net/http2/server.go b/vendor/golang.org/x/net/http2/server.go index de60fa88f..02c88b6b3 100644 --- a/vendor/golang.org/x/net/http2/server.go +++ b/vendor/golang.org/x/net/http2/server.go @@ -581,9 +581,11 @@ type serverConn struct {  	advMaxStreams               uint32 // our SETTINGS_MAX_CONCURRENT_STREAMS advertised the client  	curClientStreams            uint32 // number of open streams initiated by the client  	curPushedStreams            uint32 // number of open streams initiated by server push +	curHandlers                 uint32 // number of running handler goroutines  	maxClientStreamID           uint32 // max ever seen from client (odd), or 0 if there have been no client requests  	maxPushPromiseID            uint32 // ID of the last push promise (even), or 0 if there have been no pushes  	streams                     map[uint32]*stream +	unstartedHandlers           []unstartedHandler  	initialStreamSendWindowSize int32  	maxFrameSize                int32  	peerMaxHeaderListSize       uint32            // zero means unknown (default) @@ -981,6 +983,8 @@ func (sc *serverConn) serve() {  					return  				case gracefulShutdownMsg:  					sc.startGracefulShutdownInternal() +				case handlerDoneMsg: +					sc.handlerDone()  				default:  					panic("unknown timer")  				} @@ -1020,6 +1024,7 @@ var (  	idleTimerMsg        = new(serverMessage)  	shutdownTimerMsg    = new(serverMessage)  	gracefulShutdownMsg = new(serverMessage) +	handlerDoneMsg      = new(serverMessage)  )  func (sc *serverConn) onSettingsTimer() { sc.sendServeMsg(settingsTimerMsg) } @@ -2017,8 +2022,7 @@ func (sc *serverConn) processHeaders(f *MetaHeadersFrame) error {  		st.readDeadline = time.AfterFunc(sc.hs.ReadTimeout, st.onReadTimeout)  	} -	go sc.runHandler(rw, req, handler) -	return nil +	return sc.scheduleHandler(id, rw, req, handler)  }  func (sc *serverConn) upgradeRequest(req *http.Request) { @@ -2038,6 +2042,10 @@ func (sc *serverConn) upgradeRequest(req *http.Request) {  		sc.conn.SetReadDeadline(time.Time{})  	} +	// This is the first request on the connection, +	// so start the handler directly rather than going +	// through scheduleHandler. +	sc.curHandlers++  	go sc.runHandler(rw, req, sc.handler.ServeHTTP)  } @@ -2278,8 +2286,62 @@ func (sc *serverConn) newResponseWriter(st *stream, req *http.Request) *response  	return &responseWriter{rws: rws}  } +type unstartedHandler struct { +	streamID uint32 +	rw       *responseWriter +	req      *http.Request +	handler  func(http.ResponseWriter, *http.Request) +} + +// scheduleHandler starts a handler goroutine, +// or schedules one to start as soon as an existing handler finishes. +func (sc *serverConn) scheduleHandler(streamID uint32, rw *responseWriter, req *http.Request, handler func(http.ResponseWriter, *http.Request)) error { +	sc.serveG.check() +	maxHandlers := sc.advMaxStreams +	if sc.curHandlers < maxHandlers { +		sc.curHandlers++ +		go sc.runHandler(rw, req, handler) +		return nil +	} +	if len(sc.unstartedHandlers) > int(4*sc.advMaxStreams) { +		return sc.countError("too_many_early_resets", ConnectionError(ErrCodeEnhanceYourCalm)) +	} +	sc.unstartedHandlers = append(sc.unstartedHandlers, unstartedHandler{ +		streamID: streamID, +		rw:       rw, +		req:      req, +		handler:  handler, +	}) +	return nil +} + +func (sc *serverConn) handlerDone() { +	sc.serveG.check() +	sc.curHandlers-- +	i := 0 +	maxHandlers := sc.advMaxStreams +	for ; i < len(sc.unstartedHandlers); i++ { +		u := sc.unstartedHandlers[i] +		if sc.streams[u.streamID] == nil { +			// This stream was reset before its goroutine had a chance to start. +			continue +		} +		if sc.curHandlers >= maxHandlers { +			break +		} +		sc.curHandlers++ +		go sc.runHandler(u.rw, u.req, u.handler) +		sc.unstartedHandlers[i] = unstartedHandler{} // don't retain references +	} +	sc.unstartedHandlers = sc.unstartedHandlers[i:] +	if len(sc.unstartedHandlers) == 0 { +		sc.unstartedHandlers = nil +	} +} +  // Run on its own goroutine.  func (sc *serverConn) runHandler(rw *responseWriter, req *http.Request, handler func(http.ResponseWriter, *http.Request)) { +	defer sc.sendServeMsg(handlerDoneMsg)  	didPanic := true  	defer func() {  		rw.rws.stream.cancelCtx() diff --git a/vendor/modules.txt b/vendor/modules.txt index 3406d6102..f32252fe6 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -852,7 +852,7 @@ golang.org/x/image/webp  # golang.org/x/mod v0.12.0  ## explicit; go 1.17  golang.org/x/mod/semver -# golang.org/x/net v0.16.0 +# golang.org/x/net v0.17.0  ## explicit; go 1.17  golang.org/x/net/bpf  golang.org/x/net/context  | 
