From 7a888aaf3e7d417dc5d9a37fee0318fad35100d2 Mon Sep 17 00:00:00 2001 From: Anton Bulakh Date: Wed, 9 Jun 2021 18:54:49 +0300 Subject: [PATCH] Remove calculation threads causing concurrency issues (#3002) --- .../grid/handler/FluidGridHandler.java | 60 +++++++++---------- .../network/grid/handler/ItemGridHandler.java | 54 ++++++++--------- 2 files changed, 53 insertions(+), 61 deletions(-) diff --git a/src/main/java/com/refinedmods/refinedstorage/apiimpl/network/grid/handler/FluidGridHandler.java b/src/main/java/com/refinedmods/refinedstorage/apiimpl/network/grid/handler/FluidGridHandler.java index 825a388eb..d482df178 100644 --- a/src/main/java/com/refinedmods/refinedstorage/apiimpl/network/grid/handler/FluidGridHandler.java +++ b/src/main/java/com/refinedmods/refinedstorage/apiimpl/network/grid/handler/FluidGridHandler.java @@ -99,40 +99,36 @@ public class FluidGridHandler implements IFluidGridHandler { FluidStack stack = network.getFluidStorageCache().getCraftablesList().get(id); if (stack != null) { - Thread calculationThread = new Thread(() -> { - ICalculationResult result = network.getCraftingManager().create(stack, quantity); - if (result == null) { - return; - } + ICalculationResult result = network.getCraftingManager().create(stack, quantity); + if (result == null) { + return; + } - if (!result.isOk() && result.getType() != CalculationResultType.MISSING) { - RS.NETWORK_HANDLER.sendTo( - player, - new GridCraftingPreviewResponseMessage( - Collections.singletonList(new ErrorCraftingPreviewElement(result.getType(), result.getRecursedPattern() == null ? ItemStack.EMPTY : result.getRecursedPattern().getStack())), - id, - quantity, - true - ) - ); - } else if (result.isOk() && noPreview) { - network.getCraftingManager().start(result.getTask()); + if (!result.isOk() && result.getType() != CalculationResultType.MISSING) { + RS.NETWORK_HANDLER.sendTo( + player, + new GridCraftingPreviewResponseMessage( + Collections.singletonList(new ErrorCraftingPreviewElement(result.getType(), result.getRecursedPattern() == null ? ItemStack.EMPTY : result.getRecursedPattern().getStack())), + id, + quantity, + true + ) + ); + } else if (result.isOk() && noPreview) { + network.getCraftingManager().start(result.getTask()); - RS.NETWORK_HANDLER.sendTo(player, new GridCraftingStartResponseMessage()); - } else { - RS.NETWORK_HANDLER.sendTo( - player, - new GridCraftingPreviewResponseMessage( - result.getPreviewElements(), - id, - quantity, - true - ) - ); - } - }, "RS crafting preview calculation"); - - calculationThread.start(); + RS.NETWORK_HANDLER.sendTo(player, new GridCraftingStartResponseMessage()); + } else { + RS.NETWORK_HANDLER.sendTo( + player, + new GridCraftingPreviewResponseMessage( + result.getPreviewElements(), + id, + quantity, + true + ) + ); + } } } diff --git a/src/main/java/com/refinedmods/refinedstorage/apiimpl/network/grid/handler/ItemGridHandler.java b/src/main/java/com/refinedmods/refinedstorage/apiimpl/network/grid/handler/ItemGridHandler.java index 4232695a6..2194551c2 100644 --- a/src/main/java/com/refinedmods/refinedstorage/apiimpl/network/grid/handler/ItemGridHandler.java +++ b/src/main/java/com/refinedmods/refinedstorage/apiimpl/network/grid/handler/ItemGridHandler.java @@ -190,37 +190,33 @@ public class ItemGridHandler implements IItemGridHandler { ItemStack stack = network.getItemStorageCache().getCraftablesList().get(id); if (stack != null) { - Thread calculationThread = new Thread(() -> { - ICalculationResult result = network.getCraftingManager().create(stack, quantity); + ICalculationResult result = network.getCraftingManager().create(stack, quantity); - if (!result.isOk() && result.getType() != CalculationResultType.MISSING) { - RS.NETWORK_HANDLER.sendTo( - player, - new GridCraftingPreviewResponseMessage( - Collections.singletonList(new ErrorCraftingPreviewElement(result.getType(), result.getRecursedPattern() == null ? ItemStack.EMPTY : result.getRecursedPattern().getStack())), - id, - quantity, - false - ) - ); - } else if (result.isOk() && noPreview) { - network.getCraftingManager().start(result.getTask()); + if (!result.isOk() && result.getType() != CalculationResultType.MISSING) { + RS.NETWORK_HANDLER.sendTo( + player, + new GridCraftingPreviewResponseMessage( + Collections.singletonList(new ErrorCraftingPreviewElement(result.getType(), result.getRecursedPattern() == null ? ItemStack.EMPTY : result.getRecursedPattern().getStack())), + id, + quantity, + false + ) + ); + } else if (result.isOk() && noPreview) { + network.getCraftingManager().start(result.getTask()); - RS.NETWORK_HANDLER.sendTo(player, new GridCraftingStartResponseMessage()); - } else { - RS.NETWORK_HANDLER.sendTo( - player, - new GridCraftingPreviewResponseMessage( - result.getPreviewElements(), - id, - quantity, - false - ) - ); - } - }, "RS crafting preview calculation"); - - calculationThread.start(); + RS.NETWORK_HANDLER.sendTo(player, new GridCraftingStartResponseMessage()); + } else { + RS.NETWORK_HANDLER.sendTo( + player, + new GridCraftingPreviewResponseMessage( + result.getPreviewElements(), + id, + quantity, + false + ) + ); + } } }