This is an automated email from the ASF dual-hosted git repository.

clebertsuconic pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/activemq-artemis.git


The following commit(s) were added to refs/heads/master by this push:
     new 5087471  ARTEMIS-2696 Releasing ByteBuf after reading content on 
WebSocket
     new 3152521  This closes #3252
5087471 is described below

commit 5087471ed3e5ba4b171dae41cf5ca229e9cb08a3
Author: Luis De Bello <[email protected]>
AuthorDate: Tue Sep 1 18:44:42 2020 -0300

    ARTEMIS-2696 Releasing ByteBuf after reading content on WebSocket
---
 .../protocol/websocket/WebSocketFrameEncoder.java  |  2 ++
 .../websocket/WebSocketFrameEncoderTest.java       | 23 ++++++++++++++++++++++
 2 files changed, 25 insertions(+)

diff --git 
a/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/protocol/websocket/WebSocketFrameEncoder.java
 
b/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/protocol/websocket/WebSocketFrameEncoder.java
index 703998b..813a2a0 100644
--- 
a/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/protocol/websocket/WebSocketFrameEncoder.java
+++ 
b/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/protocol/websocket/WebSocketFrameEncoder.java
@@ -63,5 +63,7 @@ public class WebSocketFrameEncoder extends 
ChannelOutboundHandlerAdapter {
          byteBuf.readBytes(fragment, length);
          ctx.writeAndFlush(new ContinuationWebSocketFrame(finalFragment, 0, 
fragment), promise);
       }
+
+      byteBuf.release();
    }
 }
diff --git 
a/artemis-server/src/test/java/org/apache/activemq/artemis/core/server/protocol/websocket/WebSocketFrameEncoderTest.java
 
b/artemis-server/src/test/java/org/apache/activemq/artemis/core/server/protocol/websocket/WebSocketFrameEncoderTest.java
index fc67c9a..047464f 100644
--- 
a/artemis-server/src/test/java/org/apache/activemq/artemis/core/server/protocol/websocket/WebSocketFrameEncoderTest.java
+++ 
b/artemis-server/src/test/java/org/apache/activemq/artemis/core/server/protocol/websocket/WebSocketFrameEncoderTest.java
@@ -29,6 +29,7 @@ import static org.mockito.Mockito.verifyZeroInteractions;
 import java.nio.charset.StandardCharsets;
 import java.util.List;
 
+import io.netty.buffer.ByteBufUtil;
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -76,6 +77,28 @@ public class WebSocketFrameEncoderTest {
    }
 
    @Test
+   public void testWriteReleaseBuffer() throws Exception {
+      String content = "Buffer should be released";
+
+      int utf8Bytes = ByteBufUtil.utf8Bytes(content);
+      ByteBuf msg = Unpooled.directBuffer(utf8Bytes);
+      ByteBufUtil.reserveAndWriteUtf8(msg, content, utf8Bytes);
+
+      ArgumentCaptor<WebSocketFrame> frameCaptor = 
ArgumentCaptor.forClass(WebSocketFrame.class);
+
+      spy.write(ctx, msg, promise); //test
+
+      assertEquals(0, msg.refCnt());
+      assertEquals(0, msg.readableBytes());
+      verify(ctx).writeAndFlush(frameCaptor.capture(), eq(promise));
+      WebSocketFrame frame = frameCaptor.getValue();
+      assertTrue(frame instanceof BinaryWebSocketFrame);
+      assertTrue(frame.isFinalFragment());
+      assertEquals(content, frame.content().toString(StandardCharsets.UTF_8));
+   }
+
+
+   @Test
    public void testWriteSingleFrame() throws Exception {
       String content = "Content MSG length less than max frame payload length: 
" + maxFramePayloadLength;
       ByteBuf msg = Unpooled.copiedBuffer(content, StandardCharsets.UTF_8);

Reply via email to