16e50765d1
Motivation: When a ChannelOutboundBuffer contains a series of entries whose messages are all empty buffers, EpollSocketChannel sometimes fails to remove them. As a result, the result of the write(EmptyByteBuf) is never notified, making the user application hang. Modifications: - Add ChannelOutboundBuffer.removeBytes(long) method that updates the progress of the entries and removes them as much as the specified number of written bytes. It also updates the reader index of partially flushed buffer. - Make both NioSocketChannel and EpollSocketChannel use it to reduce code duplication - Replace EpollSocketChannel.updateOutboundBuffer() - Refactor EpollSocketChannel.doWrite() for simplicity - Split doWrite() into doWriteSingle() and doWriteMultiple() - Do not add a zero-length buffer to IovArray - Do not perform any real I/O when the size of IovArray is 0 Result: Another regression is gone. |
||
---|---|---|
.. | ||
src | ||
pom.xml |