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));
}
/**