Go to file
Christopher Probst c8fb2a84c5 Fix race condition of DefaultChannelGroup by introducing a closed flag.
Motivation:

Doc of ChannelGroup says, that it can be used to manage server and child channels at once.
However, in DefaultChannelGroup, there is a race condition. When a server channel accepts a child, it schedules its
registration on an event loop, which takes some time. If the ChannelGroup, which is supposed
to close server and child channels at once, is closed after the child channel has been scheduled
for registration and before this registration actually happens, this child channel is not closed
and remains connected. This could lead to connection leaks.

Modifications:

To fix this, the DefaultChannelGroup is changed to has a closed flag.
This flag is set to true, just before the close() method is actually closing channels.
The add() method checks after adding a new channel, if this flag has been set to true.
If yes, the new channel is closed. If not, we have the guarantee, that this channel will be
closed by the ChannelGroup, because setting the closed flag to true happens-before closing any channels.

This behaviour can be activated by two new constructors. The old constructors are still there and behave like before.
Therefore, no existing code should be affected directly.

Result:

If activating this feature, the DefaultChannelGroup can be used, for managing server and child channels at once.
But this activating this feature means also, that a ChannelGroup cannot be reused after calling close().
2015-08-27 09:50:09 +02:00
all [maven-release-plugin] prepare for next development iteration 2015-05-07 14:21:08 -04:00
buffer Revert "Add PooledSlicedByteBuf and PooledDuplicatedByteBuf" 2015-08-26 13:24:44 -07:00
codec [#4087] Correctly forward bytes when remove codec and handle channelInactive / channelReadComplete(...) 2015-08-21 18:26:32 +02:00
codec-dns Provide more control over DnsNameResolver.query() / Add NameResolver.resolveAll() 2015-08-18 17:40:13 +09:00
codec-haproxy Add ProtocolDetectionResult and use it in HAProxyMessageDecoder for allow detect HAProxy protocol. 2015-06-23 08:59:07 +02:00
codec-http HttpRequestEncoder consistency with master branch 2015-08-21 11:49:46 -07:00
codec-http2 Http2ConnectionHandler channelInactive sequencing 2015-08-26 15:31:47 -07:00
codec-memcache Remove Erroneous imports 2015-08-17 10:12:43 -07:00
codec-mqtt MqttEncoder build failure 2015-07-30 10:20:01 -07:00
codec-socks [maven-release-plugin] prepare for next development iteration 2015-05-07 14:21:08 -04:00
codec-stomp HttpObjectAggregator doesn't check content-length header 2015-08-17 09:26:50 -07:00
codec-xml [maven-release-plugin] prepare for next development iteration 2015-05-07 14:21:08 -04:00
common [#4110] Correct javadocs of MpscLinkedQueue 2015-08-27 09:09:28 +02:00
example Headers Performance Boost and Interface Simplification 2015-08-17 08:50:11 -07:00
handler Consistent naming style for enum 2015-08-21 07:18:19 +02:00
handler-proxy [maven-release-plugin] prepare for next development iteration 2015-05-07 14:21:08 -04:00
license Let PoolThreadCache work even if allocation and deallocation Thread are different 2015-05-27 14:38:11 +02:00
microbench Headers Performance Boost and Interface Simplification 2015-08-17 08:50:11 -07:00
resolver Provide more control over DnsNameResolver.query() / Add NameResolver.resolveAll() 2015-08-18 17:40:13 +09:00
resolver-dns Fix DNS lookup hang / Remove Comodo Secure DNS 2015-08-27 12:52:29 +09:00
tarball [maven-release-plugin] prepare for next development iteration 2015-05-07 14:21:08 -04:00
testsuite Allow to create SslContext from existing PrivateKey / X509Certificate 2015-08-12 15:05:58 +02:00
testsuite-osgi Add a property to disable osgi testsuite run 2015-08-13 09:53:26 +09:00
transport Fix race condition of DefaultChannelGroup by introducing a closed flag. 2015-08-27 09:50:09 +02:00
transport-native-epoll [#4127] Correctly set traffic class and so linger. 2015-08-27 08:58:38 +02:00
transport-rxtx maxBytesPerRead channel configuration 2015-08-05 23:59:54 -07:00
transport-sctp maxBytesPerRead channel configuration 2015-08-05 23:59:54 -07:00
transport-udt maxBytesPerRead channel configuration 2015-08-05 23:59:54 -07: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:36:54 +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:13:58 +09:00
LICENSE.txt Relicensed to Apache License v2 2009-08-28 07:15:49 +00:00
NOTICE.txt Let PoolThreadCache work even if allocation and deallocation Thread are different 2015-05-27 14:38:11 +02:00
pom.xml Correct OSGi manifests in source jars 2015-08-21 12:58:43 +09:00
README.md Add a link to the 'native transports' page 2014-07-21 12:54:24 -07:00
run-example.sh Add HTTP/2 Netty tiles example 2015-05-18 14:16:54 -07: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 versions takes place in each branch whose name is identical to <majorVersion>.<minorVersion>. For example, the development of 3.9 and 4.0 resides in the branch '3.9' and the branch '4.0' respectively.