You are viewing a plain text version of this content. The canonical link for it is here.
Posted to awf-commits@incubator.apache.org by jm...@apache.org on 2011/09/06 14:15:13 UTC
svn commit: r1165679 -
/incubator/deft/sandbox/src/main/java/org/apache/deft/io/AsynchronousSocket.java
Author: jmeehan
Date: Tue Sep 6 14:15:12 2011
New Revision: 1165679
URL: http://svn.apache.org/viewvc?rev=1165679&view=rev
Log:
DEFT-170 - Close channel on EOF read/empty write.
Modified:
incubator/deft/sandbox/src/main/java/org/apache/deft/io/AsynchronousSocket.java
Modified: incubator/deft/sandbox/src/main/java/org/apache/deft/io/AsynchronousSocket.java
URL: http://svn.apache.org/viewvc/incubator/deft/sandbox/src/main/java/org/apache/deft/io/AsynchronousSocket.java?rev=1165679&r1=1165678&r2=1165679&view=diff
==============================================================================
--- incubator/deft/sandbox/src/main/java/org/apache/deft/io/AsynchronousSocket.java (original)
+++ incubator/deft/sandbox/src/main/java/org/apache/deft/io/AsynchronousSocket.java Tue Sep 6 14:15:12 2011
@@ -193,12 +193,8 @@ public class AsynchronousSocket implemen
@Override
public void handleRead(SelectionKey key) throws IOException {
logger.debug("handle read...");
- ByteBuffer buffer = ByteBuffer.allocate(DEFAULT_BYTEBUFFER_SIZE); // TODO
- // RS
- // 110723
- // reuse
- // byte
- // buffers
+ ByteBuffer buffer = ByteBuffer.allocate(DEFAULT_BYTEBUFFER_SIZE);
+ // TODO RS 110723 reuse byte buffers
int read = 0;
try {
read = channel.read(buffer);
@@ -212,6 +208,10 @@ public class AsynchronousSocket implemen
if (read == -1) { // EOF
reachedEOF = true;
ioLoop.updateHandler(channel, interestOps &= ~SelectionKey.OP_READ);
+ if (writeBuffer.position() == 0) {
+ invokeCloseCallback();
+ }
+
return;
}
buffer.flip();
@@ -287,13 +287,11 @@ public class AsynchronousSocket implemen
readBuffer.flip();
byte[] result = new byte[size];
readBuffer.get(result, 0, size);
- readBuffer.position(readBuffer.position() + advance); // ignore the
- // delimiter (if
- // it was a
- // readUntil(..)
- // call)
- readBuffer.compact(); // "delete" the result data (data after result is
- // left intact and will not be overwritten)
+ // ignore the delimiter (if it was a readUntil(..) call)
+ readBuffer.position(readBuffer.position() + advance);
+ // "delete" the result data (data after result is left intact and will
+ // not be overwritten)
+ readBuffer.compact();
logger.debug("readBuffer size: {}", readBuffer.position());
return result;
}
@@ -357,8 +355,8 @@ public class AsynchronousSocket implemen
if (channel.isConnected()) {
writeBuffer.flip(); // prepare for write
written = channel.write(writeBuffer.getByteBuffer());
- writeBuffer.compact(); // // make room for more data be "read"
- // in
+ // make room for more data be "read" in
+ writeBuffer.compact();
}
} catch (IOException e) {
logger.error("IOException during write: {}", e.getMessage());
@@ -376,4 +374,4 @@ public class AsynchronousSocket implemen
}
}
-}
+}
\ No newline at end of file