Go to file
Trustin Lee 16e50765d1 Fix a stall write in EpollSocketChannel
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.
2014-08-01 16:58:12 -07:00
all [maven-release-plugin] prepare for next development iteration 2014-06-30 14:31:08 +02:00
buffer Remove duplicate range check in AbstractByteBuf.skipBytes() 2014-07-29 15:58:38 -07:00
codec [#2705] Call fireChannelReadComplete() if channelActive(...) decodes messages in ReplayingDecoder / ByteToMessageDecoder 2014-07-24 14:33:56 +02:00
codec-http Use our own URL shortener wherever possible 2014-07-31 17:05:54 -07:00
codec-socks Fix most inspector warnings 2014-07-02 20:21:30 +09:00
common Remove duplicated code 2014-07-31 18:10:11 -07:00
example Move generic code to HttpOrSpdyChooser to simplify implementations 2014-07-07 09:34:33 +02:00
handler [#2675] Replace synchronization performed on util.concurrent instance in TrafficCounter 2014-07-21 08:21:27 +02:00
license Preparation for porting OpenSSL support in 3.10 2014-05-17 20:01:47 +09:00
microbench [maven-release-plugin] prepare for next development iteration 2014-06-30 14:31:08 +02:00
tarball [maven-release-plugin] prepare for next development iteration 2014-06-30 14:31:08 +02:00
testsuite [#2647] Respect IOV_MAX when call writev in native transport 2014-07-09 13:32:43 +02:00
transport Fix a stall write in EpollSocketChannel 2014-08-01 16:58:12 -07:00
transport-native-epoll Fix a stall write in EpollSocketChannel 2014-08-01 16:58:12 -07:00
transport-rxtx Fix most inspector warnings 2014-07-02 20:21:30 +09:00
transport-sctp [#2644] Correctly release buffer when exception happens during send DatagramPacket or SctpMessage 2014-07-08 20:15:33 +02:00
transport-udt Fix most inspector warnings 2014-07-02 20:21:30 +09:00
.fbprefs Updated Find Bugs configuration 2009-03-04 10:33:09 +00:00
.gitignore Add JVM crash logs to .gitignore 2014-05-18 21:37:12 +09:00
.travis.yml Travis CI branch whitelisting 2013-03-11 09:55:43 +09:00
CONTRIBUTING.md Move the pull request guide to the developer guide 2014-03-12 13:18:14 +09:00
LICENSE.txt Relicensed to Apache License v2 2009-08-28 07:15:49 +00:00
NOTICE.txt Preparation for porting OpenSSL support in 3.10 2014-05-17 20:01:47 +09:00
pom.xml Add missing m2eclipse life cycle mapping 2014-07-06 16:53:53 +09:00
README.md Add a link to the 'native transports' page 2014-07-21 12:54:43 -07:00
run-example.sh Use a forked exec-maven-plugin instead of maven-antrun-plugin 2014-05-23 20:06:12 +09:00

Netty Project

Netty is an asynchronous event-driven network application framework for rapid development of maintainable high performance protocol servers & clients.

How to build

For the detailed information about building and developing Netty, please visit the developer guide. This page only gives very basic information.

You require the following to build Netty:

Note that this is build-time requirement. JDK 5 (for 3.x) or 6 (for 4.0+) is enough to run your Netty-based application.

Branches to look

The 'master' branch is where the development of the latest major version lives on. The development of all other major versions takes place in each branch whose name is identical to its major version number. For example, the development of 3.x and 4.x resides in the branch '3' and the branch '4' respectively.