netty5/codec-http/src/main/java/io/netty/handler/codec/spdy
Jeff Pinner af26826348 SPDY: fix SpdySessionHandler::updateSendWindowSize
In Netty 3, downstream writes of SPDY data frames and upstream reads of
SPDY window udpate frames occur on different threads.

When receiving a window update frame, we synchronize on a java object
(SpdySessionHandler::flowControlLock) while sending any pending writes
that are now able to complete.

When writing a data frame, we check the send window size to see if we
are allowed to write it to the socket, or if we have to enqueue it as a
pending write. To prevent races with the window update frame, this is
also synchronized on the same SpdySessionHandler::flowControlLock.

In Netty 4, upstream and downstream operations on any given channel now
occur on the same thread. Since java locks are re-entrant, this now
allows downstream writes to occur while processing window update frames.

In particular, when we receive a window update frame that unblocks a
pending write, this write completes which triggers an event notification
on the response, which in turn triggers a write of a data frame. Since
this is on the same thread it re-enters the lock and modifies the send
window. When the write completes, we continue processing pending writes
without knowledge that the window size has been decremented.
2014-08-11 11:21:24 +02:00
..
DefaultSpdyDataFrame.java Remove 'get' prefix from all HTTP/SPDY messages 2014-06-24 18:03:33 +09:00
DefaultSpdyGoAwayFrame.java Remove the deprecated methods in SPDY 2014-06-27 16:47:38 +09:00
DefaultSpdyHeaders.java Introduce TextHeaders and AsciiString 2014-06-14 15:36:19 +09:00
DefaultSpdyHeadersFrame.java Remove 'get' prefix from all HTTP/SPDY messages 2014-06-24 18:03:33 +09:00
DefaultSpdyPingFrame.java Remove the deprecated methods in SPDY 2014-06-27 16:47:38 +09:00
DefaultSpdyRstStreamFrame.java Remove the deprecated methods in SPDY 2014-06-27 16:47:38 +09:00
DefaultSpdySettingsFrame.java Remove the deprecated methods in SPDY 2014-06-27 16:47:38 +09:00
DefaultSpdyStreamFrame.java Remove the deprecated methods in SPDY 2014-06-27 16:47:38 +09:00
DefaultSpdySynReplyFrame.java Remove 'get' prefix from all HTTP/SPDY messages 2014-06-24 18:03:33 +09:00
DefaultSpdySynStreamFrame.java Remove the deprecated methods in SPDY 2014-06-27 16:47:38 +09:00
DefaultSpdyWindowUpdateFrame.java Remove the deprecated methods in SPDY 2014-06-27 16:47:38 +09:00
package-info.java Remove apiviz tags - we are focusing on user guide instead and putting diagrams there 2013-02-14 12:09:16 -08:00
SpdyCodecUtil.java Introduce TextHeaders and AsciiString 2014-06-14 15:36:19 +09:00
SpdyDataFrame.java Enable a user specify an arbitrary information with ReferenceCounted.touch() 2014-02-13 18:16:25 -08:00
SpdyFrame.java SPDY: update object hierarchy 2013-06-10 16:50:38 +02:00
SpdyFrameCodec.java Remove 'get' prefix from all HTTP/SPDY messages 2014-06-24 18:03:33 +09:00
SpdyFrameDecoder.java SPDY: refactor frame codec implementation 2014-04-15 19:57:38 +02:00
SpdyFrameDecoderDelegate.java SPDY: refactor frame codec implementation 2014-04-15 19:57:38 +02:00
SpdyFrameEncoder.java Remove 'get' prefix from all HTTP/SPDY messages 2014-06-24 18:03:33 +09:00
SpdyGoAwayFrame.java Remove the deprecated methods in SPDY 2014-06-27 16:47:38 +09:00
SpdyHeaderBlockDecoder.java SPDY: refactor frame codec implementation 2014-04-15 19:57:38 +02:00
SpdyHeaderBlockEncoder.java Fix a bug where SpdyHeaderBlockZlibDecoder fails to decompress 2014-01-13 22:42:24 +09:00
SpdyHeaderBlockJZlibEncoder.java Fix a bug where SpdyHeaderBlockZlibDecoder fails to decompress 2014-01-13 22:42:24 +09:00
SpdyHeaderBlockRawDecoder.java Remove 'get' prefix from all HTTP/SPDY messages 2014-06-24 18:03:33 +09:00
SpdyHeaderBlockRawEncoder.java Fix most inspector warnings 2014-07-02 19:55:07 +09:00
SpdyHeaderBlockZlibDecoder.java Remove 'get' prefix from all HTTP/SPDY messages 2014-06-24 18:03:33 +09:00
SpdyHeaderBlockZlibEncoder.java Port the changes in SpdyHeaderBlockZlibEncoder to master & 4.0 2014-01-13 23:00:41 +09:00
SpdyHeaders.java Introduce TextHeaders and AsciiString 2014-06-14 15:36:19 +09:00
SpdyHeadersFrame.java SPDY: handle too large header blocks 2013-06-25 11:07:15 +09:00
SpdyHttpCodec.java [#2650] Allow to disable http header validation in SpdyHttpDecoder and SpdyHttpCodec 2014-07-11 08:33:37 +02:00
SpdyHttpDecoder.java SPDY: fix pushed response NullPointerException 2014-07-21 07:54:15 +02:00
SpdyHttpEncoder.java Remove 'get' prefix from all HTTP/SPDY messages 2014-06-24 18:03:33 +09:00
SpdyHttpHeaders.java Backport the additional AsciiString/TextHeader changes from master 2014-06-14 17:33:34 +09:00
SpdyHttpResponseStreamIdHandler.java Remove 'get' prefix from all HTTP/SPDY messages 2014-06-24 18:03:33 +09:00
SpdyOrHttpChooser.java Move generic code to HttpOrSpdyChooser to simplify implementations 2014-07-07 09:37:10 +02:00
SpdyPingFrame.java Remove the deprecated methods in SPDY 2014-06-27 16:47:38 +09:00
SpdyProtocolException.java SPDY: refactor frame codec implementation 2014-04-15 19:57:38 +02:00
SpdyRstStreamFrame.java Remove the deprecated methods in SPDY 2014-06-27 16:47:38 +09:00
SpdySession.java SPDY: fix SpdySessionHandler::updateSendWindowSize 2014-08-11 11:21:24 +02:00
SpdySessionHandler.java SPDY: fix SpdySessionHandler::updateSendWindowSize 2014-08-11 11:21:24 +02:00
SpdySessionStatus.java Remove the deprecated methods in SPDY 2014-06-27 16:47:38 +09:00
SpdySettingsFrame.java Remove the deprecated methods in SPDY 2014-06-27 16:47:38 +09:00
SpdyStreamFrame.java Remove the deprecated methods in SPDY 2014-06-27 16:47:38 +09:00
SpdyStreamStatus.java Remove the deprecated methods in SPDY 2014-06-27 16:47:38 +09:00
SpdySynReplyFrame.java SPDY: update object hierarchy 2013-06-10 16:50:38 +02:00
SpdySynStreamFrame.java Remove the deprecated methods in SPDY 2014-06-27 16:47:38 +09:00
SpdyVersion.java Remove 'get' prefix from all HTTP/SPDY messages 2014-06-24 18:03:33 +09:00
SpdyWindowUpdateFrame.java Remove the deprecated methods in SPDY 2014-06-27 16:47:38 +09:00