summaryrefslogtreecommitdiffstats
path: root/src/main/java/org/openslx/filetransfer/util
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/org/openslx/filetransfer/util')
-rw-r--r--src/main/java/org/openslx/filetransfer/util/HashChecker.java16
-rw-r--r--src/main/java/org/openslx/filetransfer/util/IncomingTransferBase.java1
-rw-r--r--src/main/java/org/openslx/filetransfer/util/LocalCopyManager.java14
3 files changed, 25 insertions, 6 deletions
diff --git a/src/main/java/org/openslx/filetransfer/util/HashChecker.java b/src/main/java/org/openslx/filetransfer/util/HashChecker.java
index 2c404db..bddf829 100644
--- a/src/main/java/org/openslx/filetransfer/util/HashChecker.java
+++ b/src/main/java/org/openslx/filetransfer/util/HashChecker.java
@@ -39,9 +39,6 @@ public class HashChecker
this.algorithm = algorithm;
this.queueCapacity = queueLen;
this.queue = new LinkedBlockingQueue<>( queueLen );
- CheckThread thread = new CheckThread( false );
- thread.start();
- threads.add( thread );
}
private void threadFailed( CheckThread thread )
@@ -109,6 +106,19 @@ public class HashChecker
execCallback( task, HashResult.FAILURE );
return true;
}
+ if ( queue.isEmpty() ) {
+ CheckThread thread;
+ try {
+ thread = new CheckThread( false );
+ thread.start();
+ threads.add( thread );
+ } catch ( NoSuchAlgorithmException e1 ) {
+ LOGGER.warn( "Cannot spawn hash thread", e1 );
+ invalid = true;
+ execCallback( task, HashResult.FAILURE );
+ return true;
+ }
+ }
if ( queue.remainingCapacity() <= 1 && threads.size() < Runtime.getRuntime().availableProcessors() ) {
try {
CheckThread thread = new CheckThread( true );
diff --git a/src/main/java/org/openslx/filetransfer/util/IncomingTransferBase.java b/src/main/java/org/openslx/filetransfer/util/IncomingTransferBase.java
index 0e901e5..a1d3548 100644
--- a/src/main/java/org/openslx/filetransfer/util/IncomingTransferBase.java
+++ b/src/main/java/org/openslx/filetransfer/util/IncomingTransferBase.java
@@ -117,7 +117,6 @@ public abstract class IncomingTransferBase extends AbstractTransfer implements H
chunks = new ChunkList( fileSize, blockHashes );
if ( this.localChunkSource != null ) {
this.localCopyManager = new LocalCopyManager( this, this.chunks );
- this.localCopyManager.start();
checkLocalCopyCandidates( blockHashes, 0 );
} else {
this.localCopyManager = null;
diff --git a/src/main/java/org/openslx/filetransfer/util/LocalCopyManager.java b/src/main/java/org/openslx/filetransfer/util/LocalCopyManager.java
index 8943524..54dd2d0 100644
--- a/src/main/java/org/openslx/filetransfer/util/LocalCopyManager.java
+++ b/src/main/java/org/openslx/filetransfer/util/LocalCopyManager.java
@@ -47,6 +47,16 @@ public class LocalCopyManager extends Thread
{
if ( this.paused )
return;
+ if ( this.getState() == State.NEW ) {
+ start();
+ }
+ triggerInternal();
+ }
+
+ private synchronized void triggerInternal()
+ {
+ if ( this.paused )
+ return;
if ( !isAlive() ) {
LOGGER.warn( "Cannot be triggered when Thread is not running." );
if ( currentChunk != null ) {
@@ -77,7 +87,7 @@ public class LocalCopyManager extends Thread
} else if ( !transfer.isActive() ) {
break;
} else {
- trigger();
+ triggerInternal();
}
}
}
@@ -149,7 +159,7 @@ public class LocalCopyManager extends Thread
currentChunk = null;
}
copyCount.incrementAndGet();
- trigger();
+ triggerInternal();
return;
}
// Reaching here means failure