diff options
Diffstat (limited to 'src/main/java/org/openslx/filetransfer/util')
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 |