From 860260764dbf009f32a40ecffbefc508a129a738 Mon Sep 17 00:00:00 2001 From: MobiusDevelopment <8391001+MobiusDevelopment@users.noreply.github.com> Date: Tue, 2 Feb 2021 14:57:21 +0000 Subject: [PATCH] Moved BuyListTaskManager product restock to a separate task. --- .../taskmanager/BuyListTaskManager.java | 42 ++++++++++++++++--- .../taskmanager/BuyListTaskManager.java | 42 ++++++++++++++++--- .../taskmanager/BuyListTaskManager.java | 42 ++++++++++++++++--- .../taskmanager/BuyListTaskManager.java | 42 ++++++++++++++++--- .../taskmanager/BuyListTaskManager.java | 42 ++++++++++++++++--- .../taskmanager/BuyListTaskManager.java | 42 ++++++++++++++++--- .../taskmanager/BuyListTaskManager.java | 42 ++++++++++++++++--- .../taskmanager/BuyListTaskManager.java | 42 ++++++++++++++++--- .../taskmanager/BuyListTaskManager.java | 42 ++++++++++++++++--- .../taskmanager/BuyListTaskManager.java | 42 ++++++++++++++++--- .../taskmanager/BuyListTaskManager.java | 42 ++++++++++++++++--- .../taskmanager/BuyListTaskManager.java | 42 ++++++++++++++++--- .../taskmanager/BuyListTaskManager.java | 42 ++++++++++++++++--- .../taskmanager/BuyListTaskManager.java | 42 ++++++++++++++++--- .../taskmanager/BuyListTaskManager.java | 42 ++++++++++++++++--- .../taskmanager/BuyListTaskManager.java | 42 ++++++++++++++++--- .../taskmanager/BuyListTaskManager.java | 42 ++++++++++++++++--- .../taskmanager/BuyListTaskManager.java | 42 ++++++++++++++++--- .../taskmanager/BuyListTaskManager.java | 42 ++++++++++++++++--- 19 files changed, 703 insertions(+), 95 deletions(-) diff --git a/L2J_Mobius_1.0_Ertheia/java/org/l2jmobius/gameserver/taskmanager/BuyListTaskManager.java b/L2J_Mobius_1.0_Ertheia/java/org/l2jmobius/gameserver/taskmanager/BuyListTaskManager.java index 363e3ac065..8ab6c99d28 100644 --- a/L2J_Mobius_1.0_Ertheia/java/org/l2jmobius/gameserver/taskmanager/BuyListTaskManager.java +++ b/L2J_Mobius_1.0_Ertheia/java/org/l2jmobius/gameserver/taskmanager/BuyListTaskManager.java @@ -16,6 +16,8 @@ */ package org.l2jmobius.gameserver.taskmanager; +import java.util.ArrayList; +import java.util.List; import java.util.Map; import java.util.Map.Entry; import java.util.concurrent.ConcurrentHashMap; @@ -29,17 +31,19 @@ import org.l2jmobius.gameserver.model.buylist.Product; public class BuyListTaskManager { private static final Map PRODUCTS = new ConcurrentHashMap<>(); - private static boolean _working = false; + private static final List PENDING_UPDATES = new ArrayList<>(); + private static boolean _workingProducts = false; + private static boolean _workingSaves = false; public BuyListTaskManager() { ThreadPool.scheduleAtFixedRate(() -> { - if (_working) + if (_workingProducts) { return; } - _working = true; + _workingProducts = true; final long currentTime = System.currentTimeMillis(); for (Entry entry : PRODUCTS.entrySet()) @@ -48,12 +52,40 @@ public class BuyListTaskManager { final Product product = entry.getKey(); PRODUCTS.remove(product); - product.restock(); + synchronized (PENDING_UPDATES) + { + if (!PENDING_UPDATES.contains(product)) + { + PENDING_UPDATES.add(product); + } + } } } - _working = false; + _workingProducts = false; }, 1000, 60000); + + ThreadPool.scheduleAtFixedRate(() -> + { + if (_workingSaves) + { + return; + } + _workingSaves = true; + + if (!PENDING_UPDATES.isEmpty()) + { + final Product product; + synchronized (PENDING_UPDATES) + { + product = PENDING_UPDATES.get(0); + PENDING_UPDATES.remove(product); + } + product.restock(); + } + + _workingSaves = false; + }, 50, 50); } public void add(Product product, long endTime) diff --git a/L2J_Mobius_2.5_Underground/java/org/l2jmobius/gameserver/taskmanager/BuyListTaskManager.java b/L2J_Mobius_2.5_Underground/java/org/l2jmobius/gameserver/taskmanager/BuyListTaskManager.java index 363e3ac065..8ab6c99d28 100644 --- a/L2J_Mobius_2.5_Underground/java/org/l2jmobius/gameserver/taskmanager/BuyListTaskManager.java +++ b/L2J_Mobius_2.5_Underground/java/org/l2jmobius/gameserver/taskmanager/BuyListTaskManager.java @@ -16,6 +16,8 @@ */ package org.l2jmobius.gameserver.taskmanager; +import java.util.ArrayList; +import java.util.List; import java.util.Map; import java.util.Map.Entry; import java.util.concurrent.ConcurrentHashMap; @@ -29,17 +31,19 @@ import org.l2jmobius.gameserver.model.buylist.Product; public class BuyListTaskManager { private static final Map PRODUCTS = new ConcurrentHashMap<>(); - private static boolean _working = false; + private static final List PENDING_UPDATES = new ArrayList<>(); + private static boolean _workingProducts = false; + private static boolean _workingSaves = false; public BuyListTaskManager() { ThreadPool.scheduleAtFixedRate(() -> { - if (_working) + if (_workingProducts) { return; } - _working = true; + _workingProducts = true; final long currentTime = System.currentTimeMillis(); for (Entry entry : PRODUCTS.entrySet()) @@ -48,12 +52,40 @@ public class BuyListTaskManager { final Product product = entry.getKey(); PRODUCTS.remove(product); - product.restock(); + synchronized (PENDING_UPDATES) + { + if (!PENDING_UPDATES.contains(product)) + { + PENDING_UPDATES.add(product); + } + } } } - _working = false; + _workingProducts = false; }, 1000, 60000); + + ThreadPool.scheduleAtFixedRate(() -> + { + if (_workingSaves) + { + return; + } + _workingSaves = true; + + if (!PENDING_UPDATES.isEmpty()) + { + final Product product; + synchronized (PENDING_UPDATES) + { + product = PENDING_UPDATES.get(0); + PENDING_UPDATES.remove(product); + } + product.restock(); + } + + _workingSaves = false; + }, 50, 50); } public void add(Product product, long endTime) diff --git a/L2J_Mobius_3.0_Helios/java/org/l2jmobius/gameserver/taskmanager/BuyListTaskManager.java b/L2J_Mobius_3.0_Helios/java/org/l2jmobius/gameserver/taskmanager/BuyListTaskManager.java index 363e3ac065..8ab6c99d28 100644 --- a/L2J_Mobius_3.0_Helios/java/org/l2jmobius/gameserver/taskmanager/BuyListTaskManager.java +++ b/L2J_Mobius_3.0_Helios/java/org/l2jmobius/gameserver/taskmanager/BuyListTaskManager.java @@ -16,6 +16,8 @@ */ package org.l2jmobius.gameserver.taskmanager; +import java.util.ArrayList; +import java.util.List; import java.util.Map; import java.util.Map.Entry; import java.util.concurrent.ConcurrentHashMap; @@ -29,17 +31,19 @@ import org.l2jmobius.gameserver.model.buylist.Product; public class BuyListTaskManager { private static final Map PRODUCTS = new ConcurrentHashMap<>(); - private static boolean _working = false; + private static final List PENDING_UPDATES = new ArrayList<>(); + private static boolean _workingProducts = false; + private static boolean _workingSaves = false; public BuyListTaskManager() { ThreadPool.scheduleAtFixedRate(() -> { - if (_working) + if (_workingProducts) { return; } - _working = true; + _workingProducts = true; final long currentTime = System.currentTimeMillis(); for (Entry entry : PRODUCTS.entrySet()) @@ -48,12 +52,40 @@ public class BuyListTaskManager { final Product product = entry.getKey(); PRODUCTS.remove(product); - product.restock(); + synchronized (PENDING_UPDATES) + { + if (!PENDING_UPDATES.contains(product)) + { + PENDING_UPDATES.add(product); + } + } } } - _working = false; + _workingProducts = false; }, 1000, 60000); + + ThreadPool.scheduleAtFixedRate(() -> + { + if (_workingSaves) + { + return; + } + _workingSaves = true; + + if (!PENDING_UPDATES.isEmpty()) + { + final Product product; + synchronized (PENDING_UPDATES) + { + product = PENDING_UPDATES.get(0); + PENDING_UPDATES.remove(product); + } + product.restock(); + } + + _workingSaves = false; + }, 50, 50); } public void add(Product product, long endTime) diff --git a/L2J_Mobius_4.0_GrandCrusade/java/org/l2jmobius/gameserver/taskmanager/BuyListTaskManager.java b/L2J_Mobius_4.0_GrandCrusade/java/org/l2jmobius/gameserver/taskmanager/BuyListTaskManager.java index 363e3ac065..8ab6c99d28 100644 --- a/L2J_Mobius_4.0_GrandCrusade/java/org/l2jmobius/gameserver/taskmanager/BuyListTaskManager.java +++ b/L2J_Mobius_4.0_GrandCrusade/java/org/l2jmobius/gameserver/taskmanager/BuyListTaskManager.java @@ -16,6 +16,8 @@ */ package org.l2jmobius.gameserver.taskmanager; +import java.util.ArrayList; +import java.util.List; import java.util.Map; import java.util.Map.Entry; import java.util.concurrent.ConcurrentHashMap; @@ -29,17 +31,19 @@ import org.l2jmobius.gameserver.model.buylist.Product; public class BuyListTaskManager { private static final Map PRODUCTS = new ConcurrentHashMap<>(); - private static boolean _working = false; + private static final List PENDING_UPDATES = new ArrayList<>(); + private static boolean _workingProducts = false; + private static boolean _workingSaves = false; public BuyListTaskManager() { ThreadPool.scheduleAtFixedRate(() -> { - if (_working) + if (_workingProducts) { return; } - _working = true; + _workingProducts = true; final long currentTime = System.currentTimeMillis(); for (Entry entry : PRODUCTS.entrySet()) @@ -48,12 +52,40 @@ public class BuyListTaskManager { final Product product = entry.getKey(); PRODUCTS.remove(product); - product.restock(); + synchronized (PENDING_UPDATES) + { + if (!PENDING_UPDATES.contains(product)) + { + PENDING_UPDATES.add(product); + } + } } } - _working = false; + _workingProducts = false; }, 1000, 60000); + + ThreadPool.scheduleAtFixedRate(() -> + { + if (_workingSaves) + { + return; + } + _workingSaves = true; + + if (!PENDING_UPDATES.isEmpty()) + { + final Product product; + synchronized (PENDING_UPDATES) + { + product = PENDING_UPDATES.get(0); + PENDING_UPDATES.remove(product); + } + product.restock(); + } + + _workingSaves = false; + }, 50, 50); } public void add(Product product, long endTime) diff --git a/L2J_Mobius_5.0_Salvation/java/org/l2jmobius/gameserver/taskmanager/BuyListTaskManager.java b/L2J_Mobius_5.0_Salvation/java/org/l2jmobius/gameserver/taskmanager/BuyListTaskManager.java index 363e3ac065..8ab6c99d28 100644 --- a/L2J_Mobius_5.0_Salvation/java/org/l2jmobius/gameserver/taskmanager/BuyListTaskManager.java +++ b/L2J_Mobius_5.0_Salvation/java/org/l2jmobius/gameserver/taskmanager/BuyListTaskManager.java @@ -16,6 +16,8 @@ */ package org.l2jmobius.gameserver.taskmanager; +import java.util.ArrayList; +import java.util.List; import java.util.Map; import java.util.Map.Entry; import java.util.concurrent.ConcurrentHashMap; @@ -29,17 +31,19 @@ import org.l2jmobius.gameserver.model.buylist.Product; public class BuyListTaskManager { private static final Map PRODUCTS = new ConcurrentHashMap<>(); - private static boolean _working = false; + private static final List PENDING_UPDATES = new ArrayList<>(); + private static boolean _workingProducts = false; + private static boolean _workingSaves = false; public BuyListTaskManager() { ThreadPool.scheduleAtFixedRate(() -> { - if (_working) + if (_workingProducts) { return; } - _working = true; + _workingProducts = true; final long currentTime = System.currentTimeMillis(); for (Entry entry : PRODUCTS.entrySet()) @@ -48,12 +52,40 @@ public class BuyListTaskManager { final Product product = entry.getKey(); PRODUCTS.remove(product); - product.restock(); + synchronized (PENDING_UPDATES) + { + if (!PENDING_UPDATES.contains(product)) + { + PENDING_UPDATES.add(product); + } + } } } - _working = false; + _workingProducts = false; }, 1000, 60000); + + ThreadPool.scheduleAtFixedRate(() -> + { + if (_workingSaves) + { + return; + } + _workingSaves = true; + + if (!PENDING_UPDATES.isEmpty()) + { + final Product product; + synchronized (PENDING_UPDATES) + { + product = PENDING_UPDATES.get(0); + PENDING_UPDATES.remove(product); + } + product.restock(); + } + + _workingSaves = false; + }, 50, 50); } public void add(Product product, long endTime) diff --git a/L2J_Mobius_5.5_EtinasFate/java/org/l2jmobius/gameserver/taskmanager/BuyListTaskManager.java b/L2J_Mobius_5.5_EtinasFate/java/org/l2jmobius/gameserver/taskmanager/BuyListTaskManager.java index 363e3ac065..8ab6c99d28 100644 --- a/L2J_Mobius_5.5_EtinasFate/java/org/l2jmobius/gameserver/taskmanager/BuyListTaskManager.java +++ b/L2J_Mobius_5.5_EtinasFate/java/org/l2jmobius/gameserver/taskmanager/BuyListTaskManager.java @@ -16,6 +16,8 @@ */ package org.l2jmobius.gameserver.taskmanager; +import java.util.ArrayList; +import java.util.List; import java.util.Map; import java.util.Map.Entry; import java.util.concurrent.ConcurrentHashMap; @@ -29,17 +31,19 @@ import org.l2jmobius.gameserver.model.buylist.Product; public class BuyListTaskManager { private static final Map PRODUCTS = new ConcurrentHashMap<>(); - private static boolean _working = false; + private static final List PENDING_UPDATES = new ArrayList<>(); + private static boolean _workingProducts = false; + private static boolean _workingSaves = false; public BuyListTaskManager() { ThreadPool.scheduleAtFixedRate(() -> { - if (_working) + if (_workingProducts) { return; } - _working = true; + _workingProducts = true; final long currentTime = System.currentTimeMillis(); for (Entry entry : PRODUCTS.entrySet()) @@ -48,12 +52,40 @@ public class BuyListTaskManager { final Product product = entry.getKey(); PRODUCTS.remove(product); - product.restock(); + synchronized (PENDING_UPDATES) + { + if (!PENDING_UPDATES.contains(product)) + { + PENDING_UPDATES.add(product); + } + } } } - _working = false; + _workingProducts = false; }, 1000, 60000); + + ThreadPool.scheduleAtFixedRate(() -> + { + if (_workingSaves) + { + return; + } + _workingSaves = true; + + if (!PENDING_UPDATES.isEmpty()) + { + final Product product; + synchronized (PENDING_UPDATES) + { + product = PENDING_UPDATES.get(0); + PENDING_UPDATES.remove(product); + } + product.restock(); + } + + _workingSaves = false; + }, 50, 50); } public void add(Product product, long endTime) diff --git a/L2J_Mobius_6.0_Fafurion/java/org/l2jmobius/gameserver/taskmanager/BuyListTaskManager.java b/L2J_Mobius_6.0_Fafurion/java/org/l2jmobius/gameserver/taskmanager/BuyListTaskManager.java index 363e3ac065..8ab6c99d28 100644 --- a/L2J_Mobius_6.0_Fafurion/java/org/l2jmobius/gameserver/taskmanager/BuyListTaskManager.java +++ b/L2J_Mobius_6.0_Fafurion/java/org/l2jmobius/gameserver/taskmanager/BuyListTaskManager.java @@ -16,6 +16,8 @@ */ package org.l2jmobius.gameserver.taskmanager; +import java.util.ArrayList; +import java.util.List; import java.util.Map; import java.util.Map.Entry; import java.util.concurrent.ConcurrentHashMap; @@ -29,17 +31,19 @@ import org.l2jmobius.gameserver.model.buylist.Product; public class BuyListTaskManager { private static final Map PRODUCTS = new ConcurrentHashMap<>(); - private static boolean _working = false; + private static final List PENDING_UPDATES = new ArrayList<>(); + private static boolean _workingProducts = false; + private static boolean _workingSaves = false; public BuyListTaskManager() { ThreadPool.scheduleAtFixedRate(() -> { - if (_working) + if (_workingProducts) { return; } - _working = true; + _workingProducts = true; final long currentTime = System.currentTimeMillis(); for (Entry entry : PRODUCTS.entrySet()) @@ -48,12 +52,40 @@ public class BuyListTaskManager { final Product product = entry.getKey(); PRODUCTS.remove(product); - product.restock(); + synchronized (PENDING_UPDATES) + { + if (!PENDING_UPDATES.contains(product)) + { + PENDING_UPDATES.add(product); + } + } } } - _working = false; + _workingProducts = false; }, 1000, 60000); + + ThreadPool.scheduleAtFixedRate(() -> + { + if (_workingSaves) + { + return; + } + _workingSaves = true; + + if (!PENDING_UPDATES.isEmpty()) + { + final Product product; + synchronized (PENDING_UPDATES) + { + product = PENDING_UPDATES.get(0); + PENDING_UPDATES.remove(product); + } + product.restock(); + } + + _workingSaves = false; + }, 50, 50); } public void add(Product product, long endTime) diff --git a/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/taskmanager/BuyListTaskManager.java b/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/taskmanager/BuyListTaskManager.java index 363e3ac065..8ab6c99d28 100644 --- a/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/taskmanager/BuyListTaskManager.java +++ b/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/taskmanager/BuyListTaskManager.java @@ -16,6 +16,8 @@ */ package org.l2jmobius.gameserver.taskmanager; +import java.util.ArrayList; +import java.util.List; import java.util.Map; import java.util.Map.Entry; import java.util.concurrent.ConcurrentHashMap; @@ -29,17 +31,19 @@ import org.l2jmobius.gameserver.model.buylist.Product; public class BuyListTaskManager { private static final Map PRODUCTS = new ConcurrentHashMap<>(); - private static boolean _working = false; + private static final List PENDING_UPDATES = new ArrayList<>(); + private static boolean _workingProducts = false; + private static boolean _workingSaves = false; public BuyListTaskManager() { ThreadPool.scheduleAtFixedRate(() -> { - if (_working) + if (_workingProducts) { return; } - _working = true; + _workingProducts = true; final long currentTime = System.currentTimeMillis(); for (Entry entry : PRODUCTS.entrySet()) @@ -48,12 +52,40 @@ public class BuyListTaskManager { final Product product = entry.getKey(); PRODUCTS.remove(product); - product.restock(); + synchronized (PENDING_UPDATES) + { + if (!PENDING_UPDATES.contains(product)) + { + PENDING_UPDATES.add(product); + } + } } } - _working = false; + _workingProducts = false; }, 1000, 60000); + + ThreadPool.scheduleAtFixedRate(() -> + { + if (_workingSaves) + { + return; + } + _workingSaves = true; + + if (!PENDING_UPDATES.isEmpty()) + { + final Product product; + synchronized (PENDING_UPDATES) + { + product = PENDING_UPDATES.get(0); + PENDING_UPDATES.remove(product); + } + product.restock(); + } + + _workingSaves = false; + }, 50, 50); } public void add(Product product, long endTime) diff --git a/L2J_Mobius_8.0_Homunculus/java/org/l2jmobius/gameserver/taskmanager/BuyListTaskManager.java b/L2J_Mobius_8.0_Homunculus/java/org/l2jmobius/gameserver/taskmanager/BuyListTaskManager.java index 363e3ac065..8ab6c99d28 100644 --- a/L2J_Mobius_8.0_Homunculus/java/org/l2jmobius/gameserver/taskmanager/BuyListTaskManager.java +++ b/L2J_Mobius_8.0_Homunculus/java/org/l2jmobius/gameserver/taskmanager/BuyListTaskManager.java @@ -16,6 +16,8 @@ */ package org.l2jmobius.gameserver.taskmanager; +import java.util.ArrayList; +import java.util.List; import java.util.Map; import java.util.Map.Entry; import java.util.concurrent.ConcurrentHashMap; @@ -29,17 +31,19 @@ import org.l2jmobius.gameserver.model.buylist.Product; public class BuyListTaskManager { private static final Map PRODUCTS = new ConcurrentHashMap<>(); - private static boolean _working = false; + private static final List PENDING_UPDATES = new ArrayList<>(); + private static boolean _workingProducts = false; + private static boolean _workingSaves = false; public BuyListTaskManager() { ThreadPool.scheduleAtFixedRate(() -> { - if (_working) + if (_workingProducts) { return; } - _working = true; + _workingProducts = true; final long currentTime = System.currentTimeMillis(); for (Entry entry : PRODUCTS.entrySet()) @@ -48,12 +52,40 @@ public class BuyListTaskManager { final Product product = entry.getKey(); PRODUCTS.remove(product); - product.restock(); + synchronized (PENDING_UPDATES) + { + if (!PENDING_UPDATES.contains(product)) + { + PENDING_UPDATES.add(product); + } + } } } - _working = false; + _workingProducts = false; }, 1000, 60000); + + ThreadPool.scheduleAtFixedRate(() -> + { + if (_workingSaves) + { + return; + } + _workingSaves = true; + + if (!PENDING_UPDATES.isEmpty()) + { + final Product product; + synchronized (PENDING_UPDATES) + { + product = PENDING_UPDATES.get(0); + PENDING_UPDATES.remove(product); + } + product.restock(); + } + + _workingSaves = false; + }, 50, 50); } public void add(Product product, long endTime) diff --git a/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/taskmanager/BuyListTaskManager.java b/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/taskmanager/BuyListTaskManager.java index 363e3ac065..8ab6c99d28 100644 --- a/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/taskmanager/BuyListTaskManager.java +++ b/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/taskmanager/BuyListTaskManager.java @@ -16,6 +16,8 @@ */ package org.l2jmobius.gameserver.taskmanager; +import java.util.ArrayList; +import java.util.List; import java.util.Map; import java.util.Map.Entry; import java.util.concurrent.ConcurrentHashMap; @@ -29,17 +31,19 @@ import org.l2jmobius.gameserver.model.buylist.Product; public class BuyListTaskManager { private static final Map PRODUCTS = new ConcurrentHashMap<>(); - private static boolean _working = false; + private static final List PENDING_UPDATES = new ArrayList<>(); + private static boolean _workingProducts = false; + private static boolean _workingSaves = false; public BuyListTaskManager() { ThreadPool.scheduleAtFixedRate(() -> { - if (_working) + if (_workingProducts) { return; } - _working = true; + _workingProducts = true; final long currentTime = System.currentTimeMillis(); for (Entry entry : PRODUCTS.entrySet()) @@ -48,12 +52,40 @@ public class BuyListTaskManager { final Product product = entry.getKey(); PRODUCTS.remove(product); - product.restock(); + synchronized (PENDING_UPDATES) + { + if (!PENDING_UPDATES.contains(product)) + { + PENDING_UPDATES.add(product); + } + } } } - _working = false; + _workingProducts = false; }, 1000, 60000); + + ThreadPool.scheduleAtFixedRate(() -> + { + if (_workingSaves) + { + return; + } + _workingSaves = true; + + if (!PENDING_UPDATES.isEmpty()) + { + final Product product; + synchronized (PENDING_UPDATES) + { + product = PENDING_UPDATES.get(0); + PENDING_UPDATES.remove(product); + } + product.restock(); + } + + _workingSaves = false; + }, 50, 50); } public void add(Product product, long endTime) diff --git a/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/taskmanager/BuyListTaskManager.java b/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/taskmanager/BuyListTaskManager.java index 363e3ac065..8ab6c99d28 100644 --- a/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/taskmanager/BuyListTaskManager.java +++ b/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/taskmanager/BuyListTaskManager.java @@ -16,6 +16,8 @@ */ package org.l2jmobius.gameserver.taskmanager; +import java.util.ArrayList; +import java.util.List; import java.util.Map; import java.util.Map.Entry; import java.util.concurrent.ConcurrentHashMap; @@ -29,17 +31,19 @@ import org.l2jmobius.gameserver.model.buylist.Product; public class BuyListTaskManager { private static final Map PRODUCTS = new ConcurrentHashMap<>(); - private static boolean _working = false; + private static final List PENDING_UPDATES = new ArrayList<>(); + private static boolean _workingProducts = false; + private static boolean _workingSaves = false; public BuyListTaskManager() { ThreadPool.scheduleAtFixedRate(() -> { - if (_working) + if (_workingProducts) { return; } - _working = true; + _workingProducts = true; final long currentTime = System.currentTimeMillis(); for (Entry entry : PRODUCTS.entrySet()) @@ -48,12 +52,40 @@ public class BuyListTaskManager { final Product product = entry.getKey(); PRODUCTS.remove(product); - product.restock(); + synchronized (PENDING_UPDATES) + { + if (!PENDING_UPDATES.contains(product)) + { + PENDING_UPDATES.add(product); + } + } } } - _working = false; + _workingProducts = false; }, 1000, 60000); + + ThreadPool.scheduleAtFixedRate(() -> + { + if (_workingSaves) + { + return; + } + _workingSaves = true; + + if (!PENDING_UPDATES.isEmpty()) + { + final Product product; + synchronized (PENDING_UPDATES) + { + product = PENDING_UPDATES.get(0); + PENDING_UPDATES.remove(product); + } + product.restock(); + } + + _workingSaves = false; + }, 50, 50); } public void add(Product product, long endTime) diff --git a/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/taskmanager/BuyListTaskManager.java b/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/taskmanager/BuyListTaskManager.java index 363e3ac065..8ab6c99d28 100644 --- a/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/taskmanager/BuyListTaskManager.java +++ b/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/taskmanager/BuyListTaskManager.java @@ -16,6 +16,8 @@ */ package org.l2jmobius.gameserver.taskmanager; +import java.util.ArrayList; +import java.util.List; import java.util.Map; import java.util.Map.Entry; import java.util.concurrent.ConcurrentHashMap; @@ -29,17 +31,19 @@ import org.l2jmobius.gameserver.model.buylist.Product; public class BuyListTaskManager { private static final Map PRODUCTS = new ConcurrentHashMap<>(); - private static boolean _working = false; + private static final List PENDING_UPDATES = new ArrayList<>(); + private static boolean _workingProducts = false; + private static boolean _workingSaves = false; public BuyListTaskManager() { ThreadPool.scheduleAtFixedRate(() -> { - if (_working) + if (_workingProducts) { return; } - _working = true; + _workingProducts = true; final long currentTime = System.currentTimeMillis(); for (Entry entry : PRODUCTS.entrySet()) @@ -48,12 +52,40 @@ public class BuyListTaskManager { final Product product = entry.getKey(); PRODUCTS.remove(product); - product.restock(); + synchronized (PENDING_UPDATES) + { + if (!PENDING_UPDATES.contains(product)) + { + PENDING_UPDATES.add(product); + } + } } } - _working = false; + _workingProducts = false; }, 1000, 60000); + + ThreadPool.scheduleAtFixedRate(() -> + { + if (_workingSaves) + { + return; + } + _workingSaves = true; + + if (!PENDING_UPDATES.isEmpty()) + { + final Product product; + synchronized (PENDING_UPDATES) + { + product = PENDING_UPDATES.get(0); + PENDING_UPDATES.remove(product); + } + product.restock(); + } + + _workingSaves = false; + }, 50, 50); } public void add(Product product, long endTime) diff --git a/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/taskmanager/BuyListTaskManager.java b/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/taskmanager/BuyListTaskManager.java index 363e3ac065..8ab6c99d28 100644 --- a/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/taskmanager/BuyListTaskManager.java +++ b/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/taskmanager/BuyListTaskManager.java @@ -16,6 +16,8 @@ */ package org.l2jmobius.gameserver.taskmanager; +import java.util.ArrayList; +import java.util.List; import java.util.Map; import java.util.Map.Entry; import java.util.concurrent.ConcurrentHashMap; @@ -29,17 +31,19 @@ import org.l2jmobius.gameserver.model.buylist.Product; public class BuyListTaskManager { private static final Map PRODUCTS = new ConcurrentHashMap<>(); - private static boolean _working = false; + private static final List PENDING_UPDATES = new ArrayList<>(); + private static boolean _workingProducts = false; + private static boolean _workingSaves = false; public BuyListTaskManager() { ThreadPool.scheduleAtFixedRate(() -> { - if (_working) + if (_workingProducts) { return; } - _working = true; + _workingProducts = true; final long currentTime = System.currentTimeMillis(); for (Entry entry : PRODUCTS.entrySet()) @@ -48,12 +52,40 @@ public class BuyListTaskManager { final Product product = entry.getKey(); PRODUCTS.remove(product); - product.restock(); + synchronized (PENDING_UPDATES) + { + if (!PENDING_UPDATES.contains(product)) + { + PENDING_UPDATES.add(product); + } + } } } - _working = false; + _workingProducts = false; }, 1000, 60000); + + ThreadPool.scheduleAtFixedRate(() -> + { + if (_workingSaves) + { + return; + } + _workingSaves = true; + + if (!PENDING_UPDATES.isEmpty()) + { + final Product product; + synchronized (PENDING_UPDATES) + { + product = PENDING_UPDATES.get(0); + PENDING_UPDATES.remove(product); + } + product.restock(); + } + + _workingSaves = false; + }, 50, 50); } public void add(Product product, long endTime) diff --git a/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/taskmanager/BuyListTaskManager.java b/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/taskmanager/BuyListTaskManager.java index 363e3ac065..8ab6c99d28 100644 --- a/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/taskmanager/BuyListTaskManager.java +++ b/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/taskmanager/BuyListTaskManager.java @@ -16,6 +16,8 @@ */ package org.l2jmobius.gameserver.taskmanager; +import java.util.ArrayList; +import java.util.List; import java.util.Map; import java.util.Map.Entry; import java.util.concurrent.ConcurrentHashMap; @@ -29,17 +31,19 @@ import org.l2jmobius.gameserver.model.buylist.Product; public class BuyListTaskManager { private static final Map PRODUCTS = new ConcurrentHashMap<>(); - private static boolean _working = false; + private static final List PENDING_UPDATES = new ArrayList<>(); + private static boolean _workingProducts = false; + private static boolean _workingSaves = false; public BuyListTaskManager() { ThreadPool.scheduleAtFixedRate(() -> { - if (_working) + if (_workingProducts) { return; } - _working = true; + _workingProducts = true; final long currentTime = System.currentTimeMillis(); for (Entry entry : PRODUCTS.entrySet()) @@ -48,12 +52,40 @@ public class BuyListTaskManager { final Product product = entry.getKey(); PRODUCTS.remove(product); - product.restock(); + synchronized (PENDING_UPDATES) + { + if (!PENDING_UPDATES.contains(product)) + { + PENDING_UPDATES.add(product); + } + } } } - _working = false; + _workingProducts = false; }, 1000, 60000); + + ThreadPool.scheduleAtFixedRate(() -> + { + if (_workingSaves) + { + return; + } + _workingSaves = true; + + if (!PENDING_UPDATES.isEmpty()) + { + final Product product; + synchronized (PENDING_UPDATES) + { + product = PENDING_UPDATES.get(0); + PENDING_UPDATES.remove(product); + } + product.restock(); + } + + _workingSaves = false; + }, 50, 50); } public void add(Product product, long endTime) diff --git a/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/taskmanager/BuyListTaskManager.java b/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/taskmanager/BuyListTaskManager.java index 363e3ac065..8ab6c99d28 100644 --- a/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/taskmanager/BuyListTaskManager.java +++ b/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/taskmanager/BuyListTaskManager.java @@ -16,6 +16,8 @@ */ package org.l2jmobius.gameserver.taskmanager; +import java.util.ArrayList; +import java.util.List; import java.util.Map; import java.util.Map.Entry; import java.util.concurrent.ConcurrentHashMap; @@ -29,17 +31,19 @@ import org.l2jmobius.gameserver.model.buylist.Product; public class BuyListTaskManager { private static final Map PRODUCTS = new ConcurrentHashMap<>(); - private static boolean _working = false; + private static final List PENDING_UPDATES = new ArrayList<>(); + private static boolean _workingProducts = false; + private static boolean _workingSaves = false; public BuyListTaskManager() { ThreadPool.scheduleAtFixedRate(() -> { - if (_working) + if (_workingProducts) { return; } - _working = true; + _workingProducts = true; final long currentTime = System.currentTimeMillis(); for (Entry entry : PRODUCTS.entrySet()) @@ -48,12 +52,40 @@ public class BuyListTaskManager { final Product product = entry.getKey(); PRODUCTS.remove(product); - product.restock(); + synchronized (PENDING_UPDATES) + { + if (!PENDING_UPDATES.contains(product)) + { + PENDING_UPDATES.add(product); + } + } } } - _working = false; + _workingProducts = false; }, 1000, 60000); + + ThreadPool.scheduleAtFixedRate(() -> + { + if (_workingSaves) + { + return; + } + _workingSaves = true; + + if (!PENDING_UPDATES.isEmpty()) + { + final Product product; + synchronized (PENDING_UPDATES) + { + product = PENDING_UPDATES.get(0); + PENDING_UPDATES.remove(product); + } + product.restock(); + } + + _workingSaves = false; + }, 50, 50); } public void add(Product product, long endTime) diff --git a/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/taskmanager/BuyListTaskManager.java b/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/taskmanager/BuyListTaskManager.java index 363e3ac065..8ab6c99d28 100644 --- a/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/taskmanager/BuyListTaskManager.java +++ b/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/taskmanager/BuyListTaskManager.java @@ -16,6 +16,8 @@ */ package org.l2jmobius.gameserver.taskmanager; +import java.util.ArrayList; +import java.util.List; import java.util.Map; import java.util.Map.Entry; import java.util.concurrent.ConcurrentHashMap; @@ -29,17 +31,19 @@ import org.l2jmobius.gameserver.model.buylist.Product; public class BuyListTaskManager { private static final Map PRODUCTS = new ConcurrentHashMap<>(); - private static boolean _working = false; + private static final List PENDING_UPDATES = new ArrayList<>(); + private static boolean _workingProducts = false; + private static boolean _workingSaves = false; public BuyListTaskManager() { ThreadPool.scheduleAtFixedRate(() -> { - if (_working) + if (_workingProducts) { return; } - _working = true; + _workingProducts = true; final long currentTime = System.currentTimeMillis(); for (Entry entry : PRODUCTS.entrySet()) @@ -48,12 +52,40 @@ public class BuyListTaskManager { final Product product = entry.getKey(); PRODUCTS.remove(product); - product.restock(); + synchronized (PENDING_UPDATES) + { + if (!PENDING_UPDATES.contains(product)) + { + PENDING_UPDATES.add(product); + } + } } } - _working = false; + _workingProducts = false; }, 1000, 60000); + + ThreadPool.scheduleAtFixedRate(() -> + { + if (_workingSaves) + { + return; + } + _workingSaves = true; + + if (!PENDING_UPDATES.isEmpty()) + { + final Product product; + synchronized (PENDING_UPDATES) + { + product = PENDING_UPDATES.get(0); + PENDING_UPDATES.remove(product); + } + product.restock(); + } + + _workingSaves = false; + }, 50, 50); } public void add(Product product, long endTime) diff --git a/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/taskmanager/BuyListTaskManager.java b/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/taskmanager/BuyListTaskManager.java index 363e3ac065..8ab6c99d28 100644 --- a/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/taskmanager/BuyListTaskManager.java +++ b/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/taskmanager/BuyListTaskManager.java @@ -16,6 +16,8 @@ */ package org.l2jmobius.gameserver.taskmanager; +import java.util.ArrayList; +import java.util.List; import java.util.Map; import java.util.Map.Entry; import java.util.concurrent.ConcurrentHashMap; @@ -29,17 +31,19 @@ import org.l2jmobius.gameserver.model.buylist.Product; public class BuyListTaskManager { private static final Map PRODUCTS = new ConcurrentHashMap<>(); - private static boolean _working = false; + private static final List PENDING_UPDATES = new ArrayList<>(); + private static boolean _workingProducts = false; + private static boolean _workingSaves = false; public BuyListTaskManager() { ThreadPool.scheduleAtFixedRate(() -> { - if (_working) + if (_workingProducts) { return; } - _working = true; + _workingProducts = true; final long currentTime = System.currentTimeMillis(); for (Entry entry : PRODUCTS.entrySet()) @@ -48,12 +52,40 @@ public class BuyListTaskManager { final Product product = entry.getKey(); PRODUCTS.remove(product); - product.restock(); + synchronized (PENDING_UPDATES) + { + if (!PENDING_UPDATES.contains(product)) + { + PENDING_UPDATES.add(product); + } + } } } - _working = false; + _workingProducts = false; }, 1000, 60000); + + ThreadPool.scheduleAtFixedRate(() -> + { + if (_workingSaves) + { + return; + } + _workingSaves = true; + + if (!PENDING_UPDATES.isEmpty()) + { + final Product product; + synchronized (PENDING_UPDATES) + { + product = PENDING_UPDATES.get(0); + PENDING_UPDATES.remove(product); + } + product.restock(); + } + + _workingSaves = false; + }, 50, 50); } public void add(Product product, long endTime) diff --git a/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/taskmanager/BuyListTaskManager.java b/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/taskmanager/BuyListTaskManager.java index 363e3ac065..8ab6c99d28 100644 --- a/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/taskmanager/BuyListTaskManager.java +++ b/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/taskmanager/BuyListTaskManager.java @@ -16,6 +16,8 @@ */ package org.l2jmobius.gameserver.taskmanager; +import java.util.ArrayList; +import java.util.List; import java.util.Map; import java.util.Map.Entry; import java.util.concurrent.ConcurrentHashMap; @@ -29,17 +31,19 @@ import org.l2jmobius.gameserver.model.buylist.Product; public class BuyListTaskManager { private static final Map PRODUCTS = new ConcurrentHashMap<>(); - private static boolean _working = false; + private static final List PENDING_UPDATES = new ArrayList<>(); + private static boolean _workingProducts = false; + private static boolean _workingSaves = false; public BuyListTaskManager() { ThreadPool.scheduleAtFixedRate(() -> { - if (_working) + if (_workingProducts) { return; } - _working = true; + _workingProducts = true; final long currentTime = System.currentTimeMillis(); for (Entry entry : PRODUCTS.entrySet()) @@ -48,12 +52,40 @@ public class BuyListTaskManager { final Product product = entry.getKey(); PRODUCTS.remove(product); - product.restock(); + synchronized (PENDING_UPDATES) + { + if (!PENDING_UPDATES.contains(product)) + { + PENDING_UPDATES.add(product); + } + } } } - _working = false; + _workingProducts = false; }, 1000, 60000); + + ThreadPool.scheduleAtFixedRate(() -> + { + if (_workingSaves) + { + return; + } + _workingSaves = true; + + if (!PENDING_UPDATES.isEmpty()) + { + final Product product; + synchronized (PENDING_UPDATES) + { + product = PENDING_UPDATES.get(0); + PENDING_UPDATES.remove(product); + } + product.restock(); + } + + _workingSaves = false; + }, 50, 50); } public void add(Product product, long endTime) diff --git a/L2J_Mobius_Essence_4.0_DwellingOfSpirits/java/org/l2jmobius/gameserver/taskmanager/BuyListTaskManager.java b/L2J_Mobius_Essence_4.0_DwellingOfSpirits/java/org/l2jmobius/gameserver/taskmanager/BuyListTaskManager.java index 363e3ac065..8ab6c99d28 100644 --- a/L2J_Mobius_Essence_4.0_DwellingOfSpirits/java/org/l2jmobius/gameserver/taskmanager/BuyListTaskManager.java +++ b/L2J_Mobius_Essence_4.0_DwellingOfSpirits/java/org/l2jmobius/gameserver/taskmanager/BuyListTaskManager.java @@ -16,6 +16,8 @@ */ package org.l2jmobius.gameserver.taskmanager; +import java.util.ArrayList; +import java.util.List; import java.util.Map; import java.util.Map.Entry; import java.util.concurrent.ConcurrentHashMap; @@ -29,17 +31,19 @@ import org.l2jmobius.gameserver.model.buylist.Product; public class BuyListTaskManager { private static final Map PRODUCTS = new ConcurrentHashMap<>(); - private static boolean _working = false; + private static final List PENDING_UPDATES = new ArrayList<>(); + private static boolean _workingProducts = false; + private static boolean _workingSaves = false; public BuyListTaskManager() { ThreadPool.scheduleAtFixedRate(() -> { - if (_working) + if (_workingProducts) { return; } - _working = true; + _workingProducts = true; final long currentTime = System.currentTimeMillis(); for (Entry entry : PRODUCTS.entrySet()) @@ -48,12 +52,40 @@ public class BuyListTaskManager { final Product product = entry.getKey(); PRODUCTS.remove(product); - product.restock(); + synchronized (PENDING_UPDATES) + { + if (!PENDING_UPDATES.contains(product)) + { + PENDING_UPDATES.add(product); + } + } } } - _working = false; + _workingProducts = false; }, 1000, 60000); + + ThreadPool.scheduleAtFixedRate(() -> + { + if (_workingSaves) + { + return; + } + _workingSaves = true; + + if (!PENDING_UPDATES.isEmpty()) + { + final Product product; + synchronized (PENDING_UPDATES) + { + product = PENDING_UPDATES.get(0); + PENDING_UPDATES.remove(product); + } + product.restock(); + } + + _workingSaves = false; + }, 50, 50); } public void add(Product product, long endTime)