summaryrefslogtreecommitdiffstats
path: root/src/main/java/org/openslx/filetransfer/util/IncomingTransferBase.java
diff options
context:
space:
mode:
authorSimon Rettberg2016-08-10 19:03:23 +0200
committerSimon Rettberg2016-08-10 19:03:23 +0200
commita65d3f2581a2cf3b9b05c243a5d40ca31bd7aaa0 (patch)
tree93c4287552409821300ca6bb1ba88c8ee84baa2d /src/main/java/org/openslx/filetransfer/util/IncomingTransferBase.java
parentRemove debug spam in json helper (diff)
downloadmaster-sync-shared-a65d3f2581a2cf3b9b05c243a5d40ca31bd7aaa0.tar.gz
master-sync-shared-a65d3f2581a2cf3b9b05c243a5d40ca31bd7aaa0.tar.xz
master-sync-shared-a65d3f2581a2cf3b9b05c243a5d40ca31bd7aaa0.zip
Fix: Some chunks could be dropped from the hash queue and not marked as to-be-hashed again
Diffstat (limited to 'src/main/java/org/openslx/filetransfer/util/IncomingTransferBase.java')
-rw-r--r--src/main/java/org/openslx/filetransfer/util/IncomingTransferBase.java15
1 files changed, 12 insertions, 3 deletions
diff --git a/src/main/java/org/openslx/filetransfer/util/IncomingTransferBase.java b/src/main/java/org/openslx/filetransfer/util/IncomingTransferBase.java
index 518a29f..92c26c9 100644
--- a/src/main/java/org/openslx/filetransfer/util/IncomingTransferBase.java
+++ b/src/main/java/org/openslx/filetransfer/util/IncomingTransferBase.java
@@ -289,6 +289,8 @@ public abstract class IncomingTransferBase extends AbstractTransfer implements H
try {
hashChecker.queue( currentChunk, buffer, IncomingTransferBase.this, true );
} catch ( InterruptedException e ) {
+ chunks.markCompleted( currentChunk, false );
+ currentChunk = null;
Thread.currentThread().interrupt();
return null;
}
@@ -317,9 +319,10 @@ public abstract class IncomingTransferBase extends AbstractTransfer implements H
} else {
// We have no hash checker or the hash for the current chunk is unknown - flush to disk
writeFileData( currentChunk.range.startOffset, currentChunk.range.getLength(), buffer );
- chunks.markCompleted( currentChunk, true );
+ chunks.markCompleted( currentChunk, false );
chunkStatusChanged( currentChunk );
}
+ currentChunk = null;
}
// Get next missing chunk
try {
@@ -445,8 +448,10 @@ public abstract class IncomingTransferBase extends AbstractTransfer implements H
@Override
public void hashCheckDone( HashResult result, byte[] data, FileChunk chunk )
{
- if ( state != TransferState.IDLE && state != TransferState.WORKING )
+ if ( state != TransferState.IDLE && state != TransferState.WORKING ) {
+ LOGGER.debug( "hashCheckDone called in bad state " + state.name() );
return;
+ }
switch ( result ) {
case FAILURE:
LOGGER.warn( "Hash check of chunk " + chunk.toString()
@@ -497,8 +502,12 @@ public abstract class IncomingTransferBase extends AbstractTransfer implements H
return;
}
try {
- hashChecker.queue( chunk, data, this, blocking );
+ if ( !hashChecker.queue( chunk, data, this, blocking ) ) {
+ chunks.markCompleted( chunk, false );
+ }
} catch ( InterruptedException e ) {
+ LOGGER.debug( "Interrupted while trying to queueUnhashedChunk" );
+ chunks.markCompleted( chunk, false );
Thread.currentThread().interrupt();
}
}