diff --git a/CHANGES.txt b/CHANGES.txt
index eb10bad166..3073fd73dc 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -241,6 +241,7 @@ Merged from 2.2:
* Enable repair -pr and -local together (fix regression of CASSANDRA-7450) (CASSANDRA-12522)
* Split consistent range movement flag correction (CASSANDRA-12786)
Merged from 2.1:
+ * Upgrade netty version to fix memory leak with client encryption (CASSANDRA-13114)
* cqlsh copy-from: sort user type fields in csv (CASSANDRA-12959)
* Don't skip sstables based on maxLocalDeletionTime (CASSANDRA-12765)
diff --git a/build.xml b/build.xml
index 0fdf5f38dd..49dd95a3aa 100644
--- a/build.xml
+++ b/build.xml
@@ -429,7 +429,7 @@
-
+
diff --git a/lib/licenses/netty-all-4.0.39.Final.txt b/lib/licenses/netty-all-4.0.44.Final.txt
similarity index 100%
rename from lib/licenses/netty-all-4.0.39.Final.txt
rename to lib/licenses/netty-all-4.0.44.Final.txt
diff --git a/lib/netty-all-4.0.39.Final.jar b/lib/netty-all-4.0.44.Final.jar
similarity index 59%
rename from lib/netty-all-4.0.39.Final.jar
rename to lib/netty-all-4.0.44.Final.jar
index 3f5b3e68a6..9c5bda5e2d 100644
Binary files a/lib/netty-all-4.0.39.Final.jar and b/lib/netty-all-4.0.44.Final.jar differ
diff --git a/src/java/org/apache/cassandra/transport/Message.java b/src/java/org/apache/cassandra/transport/Message.java
index fc8cd93eec..2b629ed3be 100644
--- a/src/java/org/apache/cassandra/transport/Message.java
+++ b/src/java/org/apache/cassandra/transport/Message.java
@@ -555,10 +555,12 @@ public abstract class Message
public void exceptionCaught(final ChannelHandlerContext ctx, Throwable cause)
throws Exception
{
+ // Provide error message to client in case channel is still open
+ UnexpectedChannelExceptionHandler handler = new UnexpectedChannelExceptionHandler(ctx.channel(), false);
+ ErrorMessage errorMessage = ErrorMessage.fromException(cause, handler);
if (ctx.channel().isOpen())
{
- UnexpectedChannelExceptionHandler handler = new UnexpectedChannelExceptionHandler(ctx.channel(), false);
- ChannelFuture future = ctx.writeAndFlush(ErrorMessage.fromException(cause, handler));
+ ChannelFuture future = ctx.writeAndFlush(errorMessage);
// On protocol exception, close the channel as soon as the message have been sent
if (cause instanceof ProtocolException)
{