fb5583d788
Motivation: While trying to merge our ChannelOutboundBuffer changes we've made last week, I realized that we have quite a bit of conflicting changes at 4.1 and master. It was primarily because we added ChannelOutboundBuffer.beforeAdd() and moved some logic there, such as direct buffer conversion. However, this is not possible with the changes we've made for 4.0. We made ChannelOutboundBuffer final for example. Maintaining multiple branch is already getting painful and having different core will make it even worse, so I think we should keep the differences between 4.0 and other branches minimal. Modifications: - Move ChannelOutboundBuffer.safeRelease() to ReferenceCountUtil - Add ByteBufUtil.threadLocalBuffer() - Backported from ThreadLocalPooledDirectByteBuf - Make most methods in AbstractUnsafe final - Add AbstractChannel.filterOutboundMessage() so that a transport can convert a message to another (e.g. heap -> off-heap), and also reject unsupported messages - Move all direct buffer conversions to filterOutboundMessage() - Move all type checks to filterOutboundMessage() - Move AbstractChannel.checkEOF() to OioByteStreamChannel, because it's the only place it is used at all - Remove ChannelOutboundBuffer.current(Object), because it's not used anymore - Add protected direct buffer conversion methods to AbstractNioChannel and AbstractEpollChannel so that they can be used by their subtypes - Update all transport implementations according to the changes above Result: - The missing extension point in 4.0 has been added. - AbstractChannel.filterOutboundMessage() - Thanks to the new extension point, we moved all transport-specific logic from ChannelOutboundBuffer to each transport implementation - We can copy most of the transport implementations in 4.0 to 4.1 and master now, so that we have much less merge conflict when we modify the core. |
||
---|---|---|
.. | ||
src | ||
pom.xml |