Author: robbie
Date: Fri Jun 27 10:08:24 2014
New Revision: 1606012

URL: http://svn.apache.org/r1606012
Log:
PROTON-597: only release transport buffers if they are above a threshold 
capacity

Modified:
    
qpid/proton/trunk/proton-j/src/main/java/org/apache/qpid/proton/engine/impl/FrameParser.java
    
qpid/proton/trunk/proton-j/src/main/java/org/apache/qpid/proton/engine/impl/TransportImpl.java
    
qpid/proton/trunk/proton-j/src/main/java/org/apache/qpid/proton/engine/impl/TransportOutputAdaptor.java

Modified: 
qpid/proton/trunk/proton-j/src/main/java/org/apache/qpid/proton/engine/impl/FrameParser.java
URL: 
http://svn.apache.org/viewvc/qpid/proton/trunk/proton-j/src/main/java/org/apache/qpid/proton/engine/impl/FrameParser.java?rev=1606012&r1=1606011&r2=1606012&view=diff
==============================================================================
--- 
qpid/proton/trunk/proton-j/src/main/java/org/apache/qpid/proton/engine/impl/FrameParser.java
 (original)
+++ 
qpid/proton/trunk/proton-j/src/main/java/org/apache/qpid/proton/engine/impl/FrameParser.java
 Fri Jun 27 10:08:24 2014
@@ -516,8 +516,10 @@ class FrameParser implements TransportIn
             {
                 if (_inputBuffer.hasRemaining()) {
                     _inputBuffer.compact();
-                } else {
+                } else if (_inputBuffer.capacity() > 
TransportImpl.BUFFER_RELEASE_THRESHOLD) {
                     _inputBuffer = null;
+                } else {
+                    _inputBuffer.clear();
                 }
             }
         }

Modified: 
qpid/proton/trunk/proton-j/src/main/java/org/apache/qpid/proton/engine/impl/TransportImpl.java
URL: 
http://svn.apache.org/viewvc/qpid/proton/trunk/proton-j/src/main/java/org/apache/qpid/proton/engine/impl/TransportImpl.java?rev=1606012&r1=1606011&r2=1606012&view=diff
==============================================================================
--- 
qpid/proton/trunk/proton-j/src/main/java/org/apache/qpid/proton/engine/impl/TransportImpl.java
 (original)
+++ 
qpid/proton/trunk/proton-j/src/main/java/org/apache/qpid/proton/engine/impl/TransportImpl.java
 Fri Jun 27 10:08:24 2014
@@ -17,8 +17,6 @@
 
 package org.apache.qpid.proton.engine.impl;
 
-import static 
org.apache.qpid.proton.engine.impl.ByteBufferUtils.newReadableBuffer;
-import static org.apache.qpid.proton.engine.impl.ByteBufferUtils.pour;
 import static 
org.apache.qpid.proton.engine.impl.ByteBufferUtils.pourArrayToBuffer;
 import static 
org.apache.qpid.proton.engine.impl.ByteBufferUtils.pourBufferToArray;
 
@@ -44,7 +42,6 @@ import org.apache.qpid.proton.amqp.trans
 import org.apache.qpid.proton.codec.AMQPDefinedTypes;
 import org.apache.qpid.proton.codec.DecoderImpl;
 import org.apache.qpid.proton.codec.EncoderImpl;
-import org.apache.qpid.proton.codec.WritableBuffer;
 import org.apache.qpid.proton.engine.Connection;
 import org.apache.qpid.proton.engine.EndpointState;
 import org.apache.qpid.proton.engine.Event;
@@ -65,7 +62,7 @@ public class TransportImpl extends Endpo
     implements ProtonJTransport, FrameBody.FrameBodyHandler<Integer>,
         FrameHandler, TransportOutputWriter
 {
-    private static final byte AMQP_FRAME_TYPE = 0;
+    static final int BUFFER_RELEASE_THRESHOLD = 
Integer.getInteger("proton.transport_buffer_release_threshold", 4*1024);
 
     private FrameParser _frameParser;
 

Modified: 
qpid/proton/trunk/proton-j/src/main/java/org/apache/qpid/proton/engine/impl/TransportOutputAdaptor.java
URL: 
http://svn.apache.org/viewvc/qpid/proton/trunk/proton-j/src/main/java/org/apache/qpid/proton/engine/impl/TransportOutputAdaptor.java?rev=1606012&r1=1606011&r2=1606012&view=diff
==============================================================================
--- 
qpid/proton/trunk/proton-j/src/main/java/org/apache/qpid/proton/engine/impl/TransportOutputAdaptor.java
 (original)
+++ 
qpid/proton/trunk/proton-j/src/main/java/org/apache/qpid/proton/engine/impl/TransportOutputAdaptor.java
 Fri Jun 27 10:08:24 2014
@@ -57,19 +57,18 @@ class TransportOutputAdaptor implements 
         _output_done = _transportOutputWriter.writeInto(_outputBuffer);
         _head.limit(_outputBuffer.position());
 
-        if (_outputBuffer.position() == 0)
+        if (_outputBuffer.position() == 0 && _outputBuffer.capacity() > 
TransportImpl.BUFFER_RELEASE_THRESHOLD)
         {
             release_buffers();
         }
 
-        if (_outputBuffer == null) {
-            if (_output_done) {
-                return Transport.END_OF_STREAM;
-            } else {
-                return 0;
-            }
-        } else {
-            return _outputBuffer.position();
+        if (_output_done && (_outputBuffer == null || _outputBuffer.position() 
== 0))
+        {
+            return Transport.END_OF_STREAM;
+        }
+        else
+        {
+            return _outputBuffer == null ? 0 : _outputBuffer.position();
         }
     }
 
@@ -89,7 +88,7 @@ class TransportOutputAdaptor implements 
             _outputBuffer.compact();
             _head.position(0);
             _head.limit(_outputBuffer.position());
-            if (_outputBuffer.position() == 0) {
+            if (_outputBuffer.position() == 0 && _outputBuffer.capacity() > 
TransportImpl.BUFFER_RELEASE_THRESHOLD) {
                 release_buffers();
             }
         }



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to