@Override public void run() { int nextPartitionId; while (numPartitionsAcquiredForChecking.incrementAndGet() <= ioHelper.getNumPartitions()) { if (shutdownNotifier.shouldShutdown()) { abortCheckingPreparation(); } if (!checkResult.get()) { break; } try { readAndUnprocessedPartitions.acquire(); } catch (InterruptedException e) { abortCheckingPreparation(); return; } nextPartitionId = nextPartition.getAndIncrement(); if (!checkResult.get()) { break; } if (shutdownNotifier.shouldShutdown()) { abortCheckingPreparation(); } checker.checkPartition(nextPartitionId); mutex.lock(); try { checker.addCertificatePartsToCertificate(certificate); checker.addPartitionElements(partitionElems); checker.addElementsCheckedInOtherPartitions(inOtherPartition); } finally { mutex.unlock(); } checkedPartitions.release(); checker.clearAllSavedPartitioningElements(); } }
@Override public void abortCheckingPreparation() { checkResult.set(false); readAndUnprocessedPartitions.release(ioHelper.getNumPartitions()); checkedPartitions.release(ioHelper.getNumPartitions()); }