diff --git a/ethereum/blockcreation/src/main/java/tech/pegasys/pantheon/ethereum/blockcreation/AbstractBlockCreator.java b/ethereum/blockcreation/src/main/java/tech/pegasys/pantheon/ethereum/blockcreation/AbstractBlockCreator.java index 1f9c3f7bfa..3f65bded03 100644 --- a/ethereum/blockcreation/src/main/java/tech/pegasys/pantheon/ethereum/blockcreation/AbstractBlockCreator.java +++ b/ethereum/blockcreation/src/main/java/tech/pegasys/pantheon/ethereum/blockcreation/AbstractBlockCreator.java @@ -236,6 +236,11 @@ public void cancel() { isCancelled.set(true); } + @Override + public boolean isCancelled() { + return isCancelled.get(); + } + protected void throwIfStopped() throws CancellationException { if (isCancelled.get()) { throw new CancellationException(); diff --git a/ethereum/blockcreation/src/main/java/tech/pegasys/pantheon/ethereum/blockcreation/AsyncBlockCreator.java b/ethereum/blockcreation/src/main/java/tech/pegasys/pantheon/ethereum/blockcreation/AsyncBlockCreator.java index afb016f9f9..3ca7a3b7d3 100644 --- a/ethereum/blockcreation/src/main/java/tech/pegasys/pantheon/ethereum/blockcreation/AsyncBlockCreator.java +++ b/ethereum/blockcreation/src/main/java/tech/pegasys/pantheon/ethereum/blockcreation/AsyncBlockCreator.java @@ -15,4 +15,6 @@ public interface AsyncBlockCreator extends BlockCreator { void cancel(); + + boolean isCancelled(); } diff --git a/ethereum/blockcreation/src/main/java/tech/pegasys/pantheon/ethereum/blockcreation/BlockMiner.java b/ethereum/blockcreation/src/main/java/tech/pegasys/pantheon/ethereum/blockcreation/BlockMiner.java index 41816c1d78..7b46ea613a 100644 --- a/ethereum/blockcreation/src/main/java/tech/pegasys/pantheon/ethereum/blockcreation/BlockMiner.java +++ b/ethereum/blockcreation/src/main/java/tech/pegasys/pantheon/ethereum/blockcreation/BlockMiner.java @@ -67,14 +67,15 @@ public BlockMiner( public void run() { boolean blockMined = false; - while (!blockMined) { + while (!blockMined && !blockCreator.isCancelled()) { try { blockMined = mineBlock(); } catch (final CancellationException ex) { LOG.debug("Block creation process cancelled."); break; } catch (final InterruptedException ex) { - LOG.error("Block mining was interrupted.", ex); + LOG.debug("Block mining was interrupted.", ex); + Thread.currentThread().interrupt(); } catch (final Exception ex) { LOG.error("Block mining threw an unhandled exception.", ex); }