From 031d27823cf99fc71ba4764f9accecb7083a3935 Mon Sep 17 00:00:00 2001 From: Simon Rettberg Date: Wed, 27 Jun 2018 13:40:51 +0200 Subject: Fix FindBugs complaints --- src/main/java/org/openslx/filetransfer/FileRange.java | 8 ++++++++ .../java/org/openslx/filetransfer/util/HashChecker.java | 16 +++++++++++++--- .../openslx/filetransfer/util/IncomingTransferBase.java | 1 - .../org/openslx/filetransfer/util/LocalCopyManager.java | 14 ++++++++++++-- 4 files changed, 33 insertions(+), 6 deletions(-) (limited to 'src/main/java/org/openslx/filetransfer') diff --git a/src/main/java/org/openslx/filetransfer/FileRange.java b/src/main/java/org/openslx/filetransfer/FileRange.java index 5de9d04..e8a7d12 100644 --- a/src/main/java/org/openslx/filetransfer/FileRange.java +++ b/src/main/java/org/openslx/filetransfer/FileRange.java @@ -50,10 +50,18 @@ public class FileRange @Override public boolean equals( Object other ) { + if ( other == this ) + return true; if ( other == null || ! ( other instanceof FileRange ) ) return false; FileRange o = (FileRange)other; return o.startOffset == this.startOffset && o.endOffset == this.endOffset; } + @Override + public int hashCode() + { + return (int)startOffset ^ Integer.rotateLeft( (int)endOffset, 16 ) ^ (int)(startOffset >> 32); + } + } 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 @@ -44,6 +44,16 @@ public class LocalCopyManager extends Thread * Trigger copying of another block if possible */ public synchronized void trigger() + { + if ( this.paused ) + return; + if ( this.getState() == State.NEW ) { + start(); + } + triggerInternal(); + } + + private synchronized void triggerInternal() { if ( this.paused ) return; @@ -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 -- cgit v1.2.3-55-g7522