Author: trustin
Date: Thu Aug 2 01:37:24 2007
New Revision: 562044
URL: http://svn.apache.org/viewvc?view=rev&rev=562044
Log:
Fixed a problem SSLFilterTest sometimes fails
Modified:
mina/branches/1.0/core/src/main/java/org/apache/mina/transport/socket/nio/SocketIoProcessor.java
mina/branches/1.1/core/src/main/java/org/apache/mina/transport/socket/nio/SocketIoProcessor.java
mina/trunk/core/src/main/java/org/apache/mina/transport/socket/nio/SocketIoProcessor.java
Modified:
mina/branches/1.0/core/src/main/java/org/apache/mina/transport/socket/nio/SocketIoProcessor.java
URL:
http://svn.apache.org/viewvc/mina/branches/1.0/core/src/main/java/org/apache/mina/transport/socket/nio/SocketIoProcessor.java?view=diff&rev=562044&r1=562043&r2=562044
==============================================================================
---
mina/branches/1.0/core/src/main/java/org/apache/mina/transport/socket/nio/SocketIoProcessor.java
(original)
+++
mina/branches/1.0/core/src/main/java/org/apache/mina/transport/socket/nio/SocketIoProcessor.java
Thu Aug 2 01:37:24 2007
@@ -360,13 +360,31 @@
Queue writeRequestQueue = session.getWriteRequestQueue();
WriteRequest req;
- while ((req = (WriteRequest) writeRequestQueue.pop()) != null) {
+ if ((req = (WriteRequest) writeRequestQueue.pop()) != null) {
+ ByteBuffer buf = (ByteBuffer) req.getMessage();
try {
- ((ByteBuffer) req.getMessage()).release();
+ buf.release();
} catch (IllegalStateException e) {
session.getFilterChain().fireExceptionCaught(session, e);
} finally {
- req.getFuture().setWritten(false);
+ // The first unwritten empty buffer must be
+ // forwarded to the filter chain.
+ if (buf.hasRemaining()) {
+ req.getFuture().setWritten(false);
+ } else {
+ session.getFilterChain().fireMessageSent(session, req);
+ }
+ }
+
+ // Discard others.
+ while ((req = (WriteRequest) writeRequestQueue.pop()) != null) {
+ try {
+ ((ByteBuffer) req.getMessage()).release();
+ } catch (IllegalStateException e) {
+ session.getFilterChain().fireExceptionCaught(session, e);
+ } finally {
+ req.getFuture().setWritten(false);
+ }
}
}
}
Modified:
mina/branches/1.1/core/src/main/java/org/apache/mina/transport/socket/nio/SocketIoProcessor.java
URL:
http://svn.apache.org/viewvc/mina/branches/1.1/core/src/main/java/org/apache/mina/transport/socket/nio/SocketIoProcessor.java?view=diff&rev=562044&r1=562043&r2=562044
==============================================================================
---
mina/branches/1.1/core/src/main/java/org/apache/mina/transport/socket/nio/SocketIoProcessor.java
(original)
+++
mina/branches/1.1/core/src/main/java/org/apache/mina/transport/socket/nio/SocketIoProcessor.java
Thu Aug 2 01:37:24 2007
@@ -322,14 +322,32 @@
private void releaseWriteBuffers(SocketSessionImpl session) {
Queue<WriteRequest> writeRequestQueue = session.getWriteRequestQueue();
WriteRequest req;
-
- while ((req = writeRequestQueue.poll()) != null) {
+
+ if ((req = writeRequestQueue.poll()) != null) {
+ ByteBuffer buf = (ByteBuffer) req.getMessage();
try {
- ((ByteBuffer) req.getMessage()).release();
+ buf.release();
} catch (IllegalStateException e) {
session.getFilterChain().fireExceptionCaught(session, e);
} finally {
- req.getFuture().setWritten(false);
+ // The first unwritten empty buffer must be
+ // forwarded to the filter chain.
+ if (buf.hasRemaining()) {
+ req.getFuture().setWritten(false);
+ } else {
+ session.getFilterChain().fireMessageSent(session, req);
+ }
+ }
+
+ // Discard others.
+ while ((req = writeRequestQueue.poll()) != null) {
+ try {
+ ((ByteBuffer) req.getMessage()).release();
+ } catch (IllegalStateException e) {
+ session.getFilterChain().fireExceptionCaught(session, e);
+ } finally {
+ req.getFuture().setWritten(false);
+ }
}
}
}
Modified:
mina/trunk/core/src/main/java/org/apache/mina/transport/socket/nio/SocketIoProcessor.java
URL:
http://svn.apache.org/viewvc/mina/trunk/core/src/main/java/org/apache/mina/transport/socket/nio/SocketIoProcessor.java?view=diff&rev=562044&r1=562043&r2=562044
==============================================================================
---
mina/trunk/core/src/main/java/org/apache/mina/transport/socket/nio/SocketIoProcessor.java
(original)
+++
mina/trunk/core/src/main/java/org/apache/mina/transport/socket/nio/SocketIoProcessor.java
Thu Aug 2 01:37:24 2007
@@ -358,8 +358,20 @@
Queue<WriteRequest> writeRequestQueue = session.getWriteRequestQueue();
WriteRequest req;
- while ((req = writeRequestQueue.poll()) != null) {
- req.getFuture().setWritten(false);
+ if ((req = writeRequestQueue.poll()) != null) {
+ ByteBuffer buf = (ByteBuffer) req.getMessage();
+ // The first unwritten empty buffer must be
+ // forwarded to the filter chain.
+ if (buf.hasRemaining()) {
+ req.getFuture().setWritten(false);
+ } else {
+ session.getFilterChain().fireMessageSent(session, req);
+ }
+
+ // Discard others.
+ while ((req = writeRequestQueue.poll()) != null) {
+ req.getFuture().setWritten(false);
+ }
}
}