Go to file
Trustin Lee 46576fd2ff Fix a race condition where handler is removed before unregistration
Related: #3156

Motivation:

Let's say we have a channel with the following pipeline configuration:

  HEAD --> [E1] H1 --> [E2] H2 --> TAIL

when the channel is deregistered, the channelUnregistered() methods of
H1 and H2 will be invoked from the executor thread of E1 and E2
respectively. To ensure that the channelUnregistered() methods are
invoked from the correct thread, new one-time tasks will be created
accordingly and be scheduled via Executor.execute(Runnable).

As soon as the one-time tasks are scheduled,
DefaultChannelPipeline.fireChannelUnregistered() will start to remove
all handlers from the pipeline via teardownAll(). This process is
performed in reversed order of event propagation. i.e. H2 is removed
first, and then H1 is removed.

If the channelUnregistered() event has been passed to H2 before H2 is
removed, a user does not see any problem.

If H2 has been removed before channelUnregistered() event is passed to
H2, a user will often see the following confusing warning message:

  An exceptionCaught() event was fired, and it reached at the tail of
  the pipeline. It usually means the last handler in the pipeline did
  not handle the exception.

Modifications:

To ensure that the handlers are removed *after* all events are
propagated, traverse the pipeline in ascending order before performing
the actual removal.

Result:

A user does not get the confusing warning message anymore.
2014-12-05 16:09:00 +09:00
all Fix missing version properties of transport-epoll in all-in-one JAR 2014-10-21 22:36:10 +09:00
buffer Small performance improvements 2014-11-20 00:10:06 -05:00
codec Rocumented decoder pitfalls to avoid mistakes found in [#3184] 2014-12-01 20:25:56 +01:00
codec-dns Add EDNS support to DnsQueryEncoder 2014-10-16 17:05:08 +09:00
codec-haproxy [maven-release-plugin] prepare for next development iteration 2014-08-16 03:27:42 +09:00
codec-http Add HttpStatusClass 2014-11-21 10:52:28 +09:00
codec-memcache Add proxy support for client socket connections 2014-10-14 12:29:08 +09:00
codec-mqtt Fix dependency issues with hamcrest 2014-12-04 17:59:15 +09:00
codec-socks Add proxy support for client socket connections 2014-10-14 12:29:08 +09:00
codec-stomp Backport header improvements from 5.0 2014-11-01 00:59:57 +09:00
common Add missing @Override annotation 2014-12-04 20:53:14 +09:00
example Do not write LastHttpContent twice in HttpStaticFileServer example 2014-11-21 11:43:32 +09:00
handler Overall clean-up of the initial SniHandler/DomainNameMapping work 2014-12-04 18:23:07 +09:00
handler-proxy Use Proxy-Authorization instead of Authorization for proxy authentication 2014-11-20 20:41:09 +09:00
license Implemented LZMA frame encoder 2014-09-15 15:05:36 +02:00
microbench Benchmark for HttpRequestDecoder 2014-11-12 14:29:15 +01:00
resolver Name resolver API and DNS-based name resolver 2014-10-16 17:05:20 +09:00
resolver-dns Check the bindFuture before writing a DNS query 2014-12-01 19:46:18 +09:00
tarball [maven-release-plugin] prepare for next development iteration 2014-08-16 03:27:42 +09:00
testsuite Fix backward compatibility from the previous backport 2014-11-01 01:00:25 +09:00
transport Fix a race condition where handler is removed before unregistration 2014-12-05 16:09:00 +09:00
transport-native-epoll Name resolver API and DNS-based name resolver 2014-10-16 17:05:20 +09:00
transport-rxtx [maven-release-plugin] prepare for next development iteration 2014-08-16 03:27:42 +09:00
transport-sctp [maven-release-plugin] prepare for next development iteration 2014-08-16 03:27:42 +09:00
transport-udt Small performance improvements 2014-11-20 00:10:06 -05: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 Implemented LZMA frame encoder 2014-09-15 15:05:36 +02:00
pom.xml Fix dependency issues with hamcrest 2014-12-04 17:59:15 +09:00
README.md Add a link to the 'native transports' page 2014-07-21 12:54:24 -07:00
run-example.sh Add logLevel property to enable different log levels for the examples. 2014-11-21 10:48:57 +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 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.