From bf92e5c441b3aa03102bee2e593dd932f0cd81af Mon Sep 17 00:00:00 2001 From: Ghost_chu <2908803755@qq.com> Date: Sat, 5 Jun 2021 17:14:10 +0800 Subject: [PATCH] Fix memory leaking in ShopLoader --- .../quickshop/database/DatabaseHelper.java | 1 + .../maxgamer/quickshop/shop/ContainerShop.java | 1 + .../org/maxgamer/quickshop/shop/ShopLoader.java | 17 +++++++++++++++++ 3 files changed, 19 insertions(+) diff --git a/src/main/java/org/maxgamer/quickshop/database/DatabaseHelper.java b/src/main/java/org/maxgamer/quickshop/database/DatabaseHelper.java index 20596dc2a..5171b1290 100644 --- a/src/main/java/org/maxgamer/quickshop/database/DatabaseHelper.java +++ b/src/main/java/org/maxgamer/quickshop/database/DatabaseHelper.java @@ -198,6 +198,7 @@ public class DatabaseHelper { } public void removeShop(Shop shop) { + plugin.getShopLoader().removeShopFromShopLoader(shop); plugin.log("[DATABASE HELPER] Removing shop in the database: " + shop.toString()); if (plugin.getConfig().getBoolean("debug.shop-deletion")) { for (StackTraceElement stackTraceElement : new Exception().getStackTrace()) { diff --git a/src/main/java/org/maxgamer/quickshop/shop/ContainerShop.java b/src/main/java/org/maxgamer/quickshop/shop/ContainerShop.java index 09a801965..5af674a1e 100644 --- a/src/main/java/org/maxgamer/quickshop/shop/ContainerShop.java +++ b/src/main/java/org/maxgamer/quickshop/shop/ContainerShop.java @@ -426,6 +426,7 @@ public class ContainerShop implements Shop { } plugin.getShopManager().removeShop(this); plugin.getDatabaseHelper().removeShop(this); + plugin.getShopLoader().removeShopFromShopLoader(this); } // Use that copy we saved earlier (which is now deleted) to refresh it's now alone neighbor if (neighbor != null) { diff --git a/src/main/java/org/maxgamer/quickshop/shop/ShopLoader.java b/src/main/java/org/maxgamer/quickshop/shop/ShopLoader.java index 4a8e3b663..35a559b56 100644 --- a/src/main/java/org/maxgamer/quickshop/shop/ShopLoader.java +++ b/src/main/java/org/maxgamer/quickshop/shop/ShopLoader.java @@ -330,6 +330,23 @@ public class ShopLoader { return new ArrayList<>(shopsInDatabase); } + public void removeShopFromShopLoader(Shop shop) { + if (this.shopsInDatabase.remove(shop)) { + for (ShopDatabaseInfoOrigin origin : this.originShopsInDatabase) { + if (Objects.equals(shop.getLocation().getWorld().getName(), origin.getWorld())) { + if (shop.getLocation().getBlockX() == origin.getX()) { + if (shop.getLocation().getBlockY() == origin.getY()) { + if (shop.getLocation().getBlockZ() == origin.getZ()) { + this.originShopsInDatabase.remove(origin); + break; + } + } + } + } + } + } + } + @NotNull public List getOriginShopsInDatabase() { return new ArrayList<>(originShopsInDatabase);