From ede52c8f25aa2b7815e006cdfd6fe09f0766b548 Mon Sep 17 00:00:00 2001
From: Yannick Lecaillez <yannick.lecaillez@forgerock.com>
Date: Wed, 09 Nov 2016 14:54:10 +0000
Subject: [PATCH] OPENDJ-3179: Migrate LDAP Connection Handler to SDK Grizzly transport

---
 opendj-grizzly/src/main/java/org/forgerock/opendj/grizzly/LdapCodec.java |   14 ++++++++------
 1 files changed, 8 insertions(+), 6 deletions(-)

diff --git a/opendj-grizzly/src/main/java/org/forgerock/opendj/grizzly/LdapCodec.java b/opendj-grizzly/src/main/java/org/forgerock/opendj/grizzly/LdapCodec.java
index 2130e0a..c713819 100644
--- a/opendj-grizzly/src/main/java/org/forgerock/opendj/grizzly/LdapCodec.java
+++ b/opendj-grizzly/src/main/java/org/forgerock/opendj/grizzly/LdapCodec.java
@@ -57,22 +57,24 @@
         try {
             final Buffer buffer = ctx.getMessage();
             try (final ASN1BufferReader reader = new ASN1BufferReader(maxASN1ElementSize, buffer)) {
-                buffer.mark();
+                // Due to a bug in grizzly's ByteBufferWrapper.split(), we can't use byteBuffer.mark()
+                final int mark = buffer.position();
                 if (!reader.elementAvailable()) {
-                    buffer.reset();
-                    return ctx.getStopAction(buffer);
+                    buffer.position(mark);
+                    // We need to create a duplicate because buffer will be closed by the reader (try-with-resources)
+                    return ctx.getStopAction(buffer.duplicate());
                 }
                 final int length = reader.peekLength();
                 if (length > maxASN1ElementSize) {
-                    buffer.reset();
+                    buffer.position(mark);
                     throw DecodeException.fatalError(
                             ERR_LDAP_CLIENT_DECODE_MAX_REQUEST_SIZE_EXCEEDED.get(length, maxASN1ElementSize));
                 }
                 final Buffer remainder = (buffer.remaining() > length)
                         ? buffer.split(buffer.position() + length)
                         : null;
-                buffer.reset();
-                ctx.setMessage(decodePacket(new ASN1BufferReader(maxASN1ElementSize, buffer)));
+                buffer.position(mark);
+                ctx.setMessage(decodePacket(new ASN1BufferReader(maxASN1ElementSize, buffer.asReadOnlyBuffer())));
                 buffer.tryDispose();
                 return ctx.getInvokeAction(remainder);
             }

--
Gitblit v1.10.0