Author: edeoliveira
Date: Tue Jul 22 17:06:46 2008
New Revision: 678952

URL: http://svn.apache.org/viewvc?rev=678952&view=rev
Log:
Added constructor to allow control over ConcurrentHashMap parameters
Improved internalFlush() method concurrency

Modified:
    
mina/trunk/core/src/main/java/org/apache/mina/filter/buffer/BufferedWriteFilter.java

Modified: 
mina/trunk/core/src/main/java/org/apache/mina/filter/buffer/BufferedWriteFilter.java
URL: 
http://svn.apache.org/viewvc/mina/trunk/core/src/main/java/org/apache/mina/filter/buffer/BufferedWriteFilter.java?rev=678952&r1=678951&r2=678952&view=diff
==============================================================================
--- 
mina/trunk/core/src/main/java/org/apache/mina/filter/buffer/BufferedWriteFilter.java
 (original)
+++ 
mina/trunk/core/src/main/java/org/apache/mina/filter/buffer/BufferedWriteFilter.java
 Tue Jul 22 17:06:46 2008
@@ -68,21 +68,39 @@
 
     /**
      * Default constructor. Sets buffer size to [EMAIL PROTECTED] 
#DEFAULT_BUFFER_SIZE}
-     * bytes.
+     * bytes. Uses a default instance of [EMAIL PROTECTED] ConcurrentHashMap}.
      */
     public BufferedWriteFilter() {
-        this(DEFAULT_BUFFER_SIZE);
+        this(DEFAULT_BUFFER_SIZE, null);
     }
 
     /**
-     * Constructor which sets buffer size to <code>bufferSize</code>.
+     * Constructor which sets buffer size to <code>bufferSize</code>.Uses a 
default 
+     * instance of [EMAIL PROTECTED] ConcurrentHashMap}.
      * 
      * @param bufferSize the new buffer size
      */
     public BufferedWriteFilter(int bufferSize) {
+        this(bufferSize, null);
+    }
+
+    /**
+     * Constructor which sets buffer size to <code>bufferSize</code>. If 
+     * <code>buffersMap</code> is null then a default instance of [EMAIL 
PROTECTED] ConcurrentHashMap} 
+     * is created else the provided instance is used.
+     * 
+     * @param bufferSize the new buffer size
+     * @param buffersMap the map to use for storing each session buffer 
+     */
+    public BufferedWriteFilter(int bufferSize,
+            final ConcurrentMap<IoSession, IoBuffer> buffersMap) {
         super();
         this.bufferSize = bufferSize;
-        buffersMap = new ConcurrentHashMap<IoSession, IoBuffer>();
+        if (buffersMap == null) {
+            this.buffersMap = new ConcurrentHashMap<IoSession, IoBuffer>();
+        } else {
+            this.buffersMap = buffersMap;
+        }
     }
 
     /**
@@ -183,13 +201,14 @@
      */
     private void internalFlush(NextFilter nextFilter, IoSession session,
             IoBuffer buf) throws Exception {
+        IoBuffer tmp = null;
         synchronized (buf) {
-            buf.flip();
-            logger.debug("Flushing buffer: {}", buf);
-            nextFilter.filterWrite(session, new DefaultWriteRequest(buf
-                    .duplicate()));
+            buf.flip();            
+            tmp = buf.duplicate();
             buf.clear();
         }
+        logger.debug("Flushing buffer: {}", tmp);
+        nextFilter.filterWrite(session, new DefaultWriteRequest(tmp));
     }
 
     /**


Reply via email to