From c7c06973d1f06049d9595914e6049d9f55ff0f29 Mon Sep 17 00:00:00 2001 From: Achim Kraus Date: Thu, 31 Dec 2020 08:28:08 +0100 Subject: [PATCH] Reduce and reorder sync section in blockwise layer. Move clearBlock2Status out of the synchronized section of the BlockwiseStatus. ClearBlock2Status synchronizes on block2Transfers and must be called within a synchronized section of a BlockwiseStatus. Signed-off-by: Achim Kraus --- .../core/network/stack/BlockwiseLayer.java | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/californium-core/src/main/java/org/eclipse/californium/core/network/stack/BlockwiseLayer.java b/californium-core/src/main/java/org/eclipse/californium/core/network/stack/BlockwiseLayer.java index 52886c37d0..ef085a55d4 100644 --- a/californium-core/src/main/java/org/eclipse/californium/core/network/stack/BlockwiseLayer.java +++ b/californium-core/src/main/java/org/eclipse/californium/core/network/stack/BlockwiseLayer.java @@ -522,20 +522,24 @@ private void handleInboundRequestForNextBlock(final Exchange exchange, final Req final KeyUri key, final Block2BlockwiseStatus status) { Response block; + boolean complete; synchronized (status) { BlockOption block2 = request.getOptions().getBlock2(); block = status.getNextResponseBlock(block2); - if (status.isComplete()) { - // clean up blockwise status - LOGGER.debug("peer has requested last block of blockwise transfer: {}", status); - clearBlock2Status(key, status); - } else { + complete = status.isComplete(); + if (!complete) { prepareBlock2Cleanup(status, key); LOGGER.debug("peer has requested intermediary block of blockwise transfer: {}", status); } } + if (complete) { + // clean up blockwise status + LOGGER.debug("peer has requested last block of blockwise transfer: {}", status); + clearBlock2Status(key, status); + } + exchange.setCurrentResponse(block); lower().sendResponse(exchange, block); }