Go to file
Trustin Lee 309ee68c21 Fix a race condition in DefaultPromise
.. which occurs when a user adds a listener from different threads after the promise is done and the notifications for the listeners, that were added before the promise is done, is in progress.  For instance:

   Thread-1: p.addListener(listenerA);
   Thread-1: p.setSuccess(null);
   Thread-2: p.addListener(listenerB);
   Thread-2: p.executor.execute(taskNotifyListenerB);
   Thread-1: p.executor.execute(taskNotifyListenerA);

taskNotifyListenerB should not really notify listenerB until taskNotifyListenerA is finished.

To fix this issue:

- Change the semantic of (listeners == null) to determine if the early
  listeners [1] were notified
- If a late listener is added before the early listeners are notified,
  the notification of the late listener is deferred until the early
  listeners are notified (i.e. until listeners == null)
- The late listeners with deferred notifications are stored in a lazily
  instantiated queue to preserve ordering, and then are notified once
  the early listeners are notified.

[1] the listeners that were added before the promise is done
[2] the listeners that were added after the promise is done
2014-02-06 22:05:24 -08:00
all [maven-release-plugin] prepare for next development iteration 2014-01-21 08:18:32 +01:00
buffer Provide an optimized AtomicIntegerFieldUpdater, AtomicLongFieldUpdater and AtomicReferenceFieldUpdater 2014-02-06 20:08:45 +01:00
codec #2183 Fix for releasing of the internal cumulation buffer in ByteToMessageDecoder 2014-02-06 20:07:56 +01:00
codec-http Fix resource leaks in WebSocketServerProtocol(Handshake)Handler 2014-02-06 21:22:01 -08:00
codec-socks Fix the potential copyright issue in SocksCommonUtils 2014-02-06 15:00:06 -08:00
common Fix a race condition in DefaultPromise 2014-02-06 22:05:24 -08:00
example Reorganize the SPDY example 2014-02-05 14:54:02 -08:00
handler Fix the potential copyright issue in SocksCommonUtils 2014-02-06 15:00:06 -08:00
license Add back jzlib license file and notice 2013-02-21 14:00:59 -08:00
microbench [maven-release-plugin] prepare for next development iteration 2014-01-21 08:18:32 +01:00
tarball [maven-release-plugin] prepare for next development iteration 2014-01-21 08:18:32 +01:00
testsuite Allow to skip autobahntestsuite by specify property skipAutobahnTestsuite 2014-02-06 07:10:52 +01:00
transport Provide an optimized AtomicIntegerFieldUpdater, AtomicLongFieldUpdater and AtomicReferenceFieldUpdater 2014-02-06 20:08:45 +01:00
transport-rxtx [maven-release-plugin] prepare for next development iteration 2014-01-21 08:18:32 +01:00
transport-sctp [maven-release-plugin] prepare for next development iteration 2014-01-21 08:18:32 +01:00
transport-udt [maven-release-plugin] prepare for next development iteration 2014-01-21 08:18:32 +01:00
.fbfilter.xml Update license headers 2012-06-04 13:31:44 -07:00
.fbprefs Updated Find Bugs configuration 2009-03-04 10:33:09 +00:00
.gitignore Format and partially describe Gitignore 2013-12-10 07:04:38 +01:00
.travis.yml Travis CI branch whitelisting 2013-03-11 09:55:43 +09:00
LICENSE.txt Relicensed to Apache License v2 2009-08-28 07:15:49 +00:00
NOTICE.txt Add back jzlib license file and notice 2013-02-21 14:00:59 -08:00
pom.xml Exclude sun.nio.ch.DirectBuffer from animal-sniffer check 2014-01-29 11:56:06 +09:00
README.md Update README.md 2014-01-16 14:38:36 +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.