summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--org.eclipse.jgit.lfs.server/src/org/eclipse/jgit/lfs/server/fs/ObjectDownloadListener.java32
1 files changed, 19 insertions, 13 deletions
diff --git a/org.eclipse.jgit.lfs.server/src/org/eclipse/jgit/lfs/server/fs/ObjectDownloadListener.java b/org.eclipse.jgit.lfs.server/src/org/eclipse/jgit/lfs/server/fs/ObjectDownloadListener.java
index 0b96426420..60258602f1 100644
--- a/org.eclipse.jgit.lfs.server/src/org/eclipse/jgit/lfs/server/fs/ObjectDownloadListener.java
+++ b/org.eclipse.jgit.lfs.server/src/org/eclipse/jgit/lfs/server/fs/ObjectDownloadListener.java
@@ -80,7 +80,7 @@ public class ObjectDownloadListener implements WriteListener {
private final WritableByteChannel outChannel;
- private final ByteBuffer buffer = ByteBuffer.allocateDirect(8192);
+ private ByteBuffer buffer = ByteBuffer.allocateDirect(8192);
/**
* @param repository
@@ -115,20 +115,26 @@ public class ObjectDownloadListener implements WriteListener {
@Override
public void onWritePossible() throws IOException {
while (out.isReady()) {
- if (in.read(buffer) != -1) {
- buffer.flip();
- outChannel.write(buffer);
- buffer.compact();
- } else {
- in.close();
- buffer.flip();
- while (out.isReady()) {
- if (buffer.hasRemaining()) {
- outChannel.write(buffer);
- } else {
+ try {
+ buffer.clear();
+ if (in.read(buffer) < 0) {
+ buffer = null;
+ } else {
+ buffer.flip();
+ }
+ } catch(Throwable t) {
+ LOG.log(Level.SEVERE, t.getMessage(), t);
+ buffer = null;
+ } finally {
+ if (buffer != null) {
+ outChannel.write(buffer);
+ } else {
+ try {
+ out.close();
+ } finally {
context.complete();
- return;
}
+ return;
}
}
}