From 31d35e5c58334a5c71874a0244a3e83bf0ae95d8 Mon Sep 17 00:00:00 2001 From: MobiusDevelopment <8391001+MobiusDevelopment@users.noreply.github.com> Date: Fri, 14 Oct 2022 03:45:35 +0000 Subject: [PATCH] Addition of ThreadPool validate delay method. --- .../l2jmobius/commons/threads/ThreadPool.java | 29 +++++++++++++++++-- .../l2jmobius/commons/threads/ThreadPool.java | 29 +++++++++++++++++-- .../l2jmobius/commons/threads/ThreadPool.java | 29 +++++++++++++++++-- .../l2jmobius/commons/threads/ThreadPool.java | 29 +++++++++++++++++-- .../l2jmobius/commons/threads/ThreadPool.java | 29 +++++++++++++++++-- .../l2jmobius/commons/threads/ThreadPool.java | 29 +++++++++++++++++-- .../l2jmobius/commons/threads/ThreadPool.java | 29 +++++++++++++++++-- .../l2jmobius/commons/threads/ThreadPool.java | 29 +++++++++++++++++-- .../l2jmobius/commons/threads/ThreadPool.java | 29 +++++++++++++++++-- .../l2jmobius/commons/threads/ThreadPool.java | 29 +++++++++++++++++-- .../l2jmobius/commons/threads/ThreadPool.java | 29 +++++++++++++++++-- .../gameserver/threads/ThreadPool.java | 29 +++++++++++++++++-- .../l2jmobius/commons/threads/ThreadPool.java | 29 +++++++++++++++++-- .../l2jmobius/commons/threads/ThreadPool.java | 29 +++++++++++++++++-- .../l2jmobius/commons/threads/ThreadPool.java | 29 +++++++++++++++++-- .../l2jmobius/commons/threads/ThreadPool.java | 29 +++++++++++++++++-- .../l2jmobius/commons/threads/ThreadPool.java | 29 +++++++++++++++++-- .../l2jmobius/commons/threads/ThreadPool.java | 29 +++++++++++++++++-- .../l2jmobius/commons/threads/ThreadPool.java | 29 +++++++++++++++++-- .../l2jmobius/commons/threads/ThreadPool.java | 29 +++++++++++++++++-- .../l2jmobius/commons/threads/ThreadPool.java | 29 +++++++++++++++++-- .../l2jmobius/commons/threads/ThreadPool.java | 29 +++++++++++++++++-- .../l2jmobius/commons/threads/ThreadPool.java | 29 +++++++++++++++++-- .../l2jmobius/commons/threads/ThreadPool.java | 29 +++++++++++++++++-- .../l2jmobius/commons/threads/ThreadPool.java | 29 +++++++++++++++++-- .../l2jmobius/commons/threads/ThreadPool.java | 29 +++++++++++++++++-- .../l2jmobius/commons/threads/ThreadPool.java | 29 +++++++++++++++++-- .../l2jmobius/commons/threads/ThreadPool.java | 29 +++++++++++++++++-- .../l2jmobius/commons/threads/ThreadPool.java | 29 +++++++++++++++++-- .../l2jmobius/commons/threads/ThreadPool.java | 29 +++++++++++++++++-- 30 files changed, 810 insertions(+), 60 deletions(-) diff --git a/L2J_Mobius_01.0_Ertheia/java/org/l2jmobius/commons/threads/ThreadPool.java b/L2J_Mobius_01.0_Ertheia/java/org/l2jmobius/commons/threads/ThreadPool.java index 7f90cf2e7a..07998e3848 100644 --- a/L2J_Mobius_01.0_Ertheia/java/org/l2jmobius/commons/threads/ThreadPool.java +++ b/L2J_Mobius_01.0_Ertheia/java/org/l2jmobius/commons/threads/ThreadPool.java @@ -24,6 +24,7 @@ import java.util.concurrent.TimeUnit; import java.util.logging.Logger; import org.l2jmobius.Config; +import org.l2jmobius.commons.util.CommonUtil; /** * This class handles thread pooling system.
@@ -40,6 +41,7 @@ public class ThreadPool private static final ScheduledThreadPoolExecutor[] SCHEDULED_POOLS = new ScheduledThreadPoolExecutor[Config.SCHEDULED_THREAD_POOL_COUNT]; private static final ThreadPoolExecutor[] INSTANT_POOLS = new ThreadPoolExecutor[Config.INSTANT_THREAD_POOL_COUNT]; + private static final long MAX_DELAY = 3155695200000L; // One hundred years. private static int SCHEDULED_THREAD_RANDOMIZER = 0; private static int INSTANT_THREAD_RANDOMIZER = 0; @@ -104,7 +106,7 @@ public class ThreadPool { try { - return SCHEDULED_POOLS[SCHEDULED_THREAD_RANDOMIZER++ % Config.SCHEDULED_THREAD_POOL_COUNT].schedule(new RunnableWrapper(runnable), delay, TimeUnit.MILLISECONDS); + return SCHEDULED_POOLS[SCHEDULED_THREAD_RANDOMIZER++ % Config.SCHEDULED_THREAD_POOL_COUNT].schedule(new RunnableWrapper(runnable), validate(delay), TimeUnit.MILLISECONDS); } catch (Exception e) { @@ -124,7 +126,7 @@ public class ThreadPool { try { - return SCHEDULED_POOLS[SCHEDULED_THREAD_RANDOMIZER++ % Config.SCHEDULED_THREAD_POOL_COUNT].scheduleAtFixedRate(new RunnableWrapper(runnable), initialDelay, period, TimeUnit.MILLISECONDS); + return SCHEDULED_POOLS[SCHEDULED_THREAD_RANDOMIZER++ % Config.SCHEDULED_THREAD_POOL_COUNT].scheduleAtFixedRate(new RunnableWrapper(runnable), validate(initialDelay), validate(period), TimeUnit.MILLISECONDS); } catch (Exception e) { @@ -149,6 +151,29 @@ public class ThreadPool } } + /** + * @param delay : the delay to validate. + * @return a valid value, from 0 to MAX_DELAY. + */ + private static long validate(long delay) + { + if (delay < 0) + { + final Exception e = new Exception(); + LOGGER.warning("ThreadPool found delay " + delay + "!"); + LOGGER.warning(CommonUtil.getStackTrace(e)); + return 0; + } + if (delay > MAX_DELAY) + { + final Exception e = new Exception(); + LOGGER.warning("ThreadPool found delay " + delay + "!"); + LOGGER.warning(CommonUtil.getStackTrace(e)); + return MAX_DELAY; + } + return delay; + } + public static String[] getStats() { final String[] stats = new String[(SCHEDULED_POOLS.length + INSTANT_POOLS.length) * 10]; diff --git a/L2J_Mobius_02.5_Underground/java/org/l2jmobius/commons/threads/ThreadPool.java b/L2J_Mobius_02.5_Underground/java/org/l2jmobius/commons/threads/ThreadPool.java index 7f90cf2e7a..07998e3848 100644 --- a/L2J_Mobius_02.5_Underground/java/org/l2jmobius/commons/threads/ThreadPool.java +++ b/L2J_Mobius_02.5_Underground/java/org/l2jmobius/commons/threads/ThreadPool.java @@ -24,6 +24,7 @@ import java.util.concurrent.TimeUnit; import java.util.logging.Logger; import org.l2jmobius.Config; +import org.l2jmobius.commons.util.CommonUtil; /** * This class handles thread pooling system.
@@ -40,6 +41,7 @@ public class ThreadPool private static final ScheduledThreadPoolExecutor[] SCHEDULED_POOLS = new ScheduledThreadPoolExecutor[Config.SCHEDULED_THREAD_POOL_COUNT]; private static final ThreadPoolExecutor[] INSTANT_POOLS = new ThreadPoolExecutor[Config.INSTANT_THREAD_POOL_COUNT]; + private static final long MAX_DELAY = 3155695200000L; // One hundred years. private static int SCHEDULED_THREAD_RANDOMIZER = 0; private static int INSTANT_THREAD_RANDOMIZER = 0; @@ -104,7 +106,7 @@ public class ThreadPool { try { - return SCHEDULED_POOLS[SCHEDULED_THREAD_RANDOMIZER++ % Config.SCHEDULED_THREAD_POOL_COUNT].schedule(new RunnableWrapper(runnable), delay, TimeUnit.MILLISECONDS); + return SCHEDULED_POOLS[SCHEDULED_THREAD_RANDOMIZER++ % Config.SCHEDULED_THREAD_POOL_COUNT].schedule(new RunnableWrapper(runnable), validate(delay), TimeUnit.MILLISECONDS); } catch (Exception e) { @@ -124,7 +126,7 @@ public class ThreadPool { try { - return SCHEDULED_POOLS[SCHEDULED_THREAD_RANDOMIZER++ % Config.SCHEDULED_THREAD_POOL_COUNT].scheduleAtFixedRate(new RunnableWrapper(runnable), initialDelay, period, TimeUnit.MILLISECONDS); + return SCHEDULED_POOLS[SCHEDULED_THREAD_RANDOMIZER++ % Config.SCHEDULED_THREAD_POOL_COUNT].scheduleAtFixedRate(new RunnableWrapper(runnable), validate(initialDelay), validate(period), TimeUnit.MILLISECONDS); } catch (Exception e) { @@ -149,6 +151,29 @@ public class ThreadPool } } + /** + * @param delay : the delay to validate. + * @return a valid value, from 0 to MAX_DELAY. + */ + private static long validate(long delay) + { + if (delay < 0) + { + final Exception e = new Exception(); + LOGGER.warning("ThreadPool found delay " + delay + "!"); + LOGGER.warning(CommonUtil.getStackTrace(e)); + return 0; + } + if (delay > MAX_DELAY) + { + final Exception e = new Exception(); + LOGGER.warning("ThreadPool found delay " + delay + "!"); + LOGGER.warning(CommonUtil.getStackTrace(e)); + return MAX_DELAY; + } + return delay; + } + public static String[] getStats() { final String[] stats = new String[(SCHEDULED_POOLS.length + INSTANT_POOLS.length) * 10]; diff --git a/L2J_Mobius_03.0_Helios/java/org/l2jmobius/commons/threads/ThreadPool.java b/L2J_Mobius_03.0_Helios/java/org/l2jmobius/commons/threads/ThreadPool.java index 7f90cf2e7a..07998e3848 100644 --- a/L2J_Mobius_03.0_Helios/java/org/l2jmobius/commons/threads/ThreadPool.java +++ b/L2J_Mobius_03.0_Helios/java/org/l2jmobius/commons/threads/ThreadPool.java @@ -24,6 +24,7 @@ import java.util.concurrent.TimeUnit; import java.util.logging.Logger; import org.l2jmobius.Config; +import org.l2jmobius.commons.util.CommonUtil; /** * This class handles thread pooling system.
@@ -40,6 +41,7 @@ public class ThreadPool private static final ScheduledThreadPoolExecutor[] SCHEDULED_POOLS = new ScheduledThreadPoolExecutor[Config.SCHEDULED_THREAD_POOL_COUNT]; private static final ThreadPoolExecutor[] INSTANT_POOLS = new ThreadPoolExecutor[Config.INSTANT_THREAD_POOL_COUNT]; + private static final long MAX_DELAY = 3155695200000L; // One hundred years. private static int SCHEDULED_THREAD_RANDOMIZER = 0; private static int INSTANT_THREAD_RANDOMIZER = 0; @@ -104,7 +106,7 @@ public class ThreadPool { try { - return SCHEDULED_POOLS[SCHEDULED_THREAD_RANDOMIZER++ % Config.SCHEDULED_THREAD_POOL_COUNT].schedule(new RunnableWrapper(runnable), delay, TimeUnit.MILLISECONDS); + return SCHEDULED_POOLS[SCHEDULED_THREAD_RANDOMIZER++ % Config.SCHEDULED_THREAD_POOL_COUNT].schedule(new RunnableWrapper(runnable), validate(delay), TimeUnit.MILLISECONDS); } catch (Exception e) { @@ -124,7 +126,7 @@ public class ThreadPool { try { - return SCHEDULED_POOLS[SCHEDULED_THREAD_RANDOMIZER++ % Config.SCHEDULED_THREAD_POOL_COUNT].scheduleAtFixedRate(new RunnableWrapper(runnable), initialDelay, period, TimeUnit.MILLISECONDS); + return SCHEDULED_POOLS[SCHEDULED_THREAD_RANDOMIZER++ % Config.SCHEDULED_THREAD_POOL_COUNT].scheduleAtFixedRate(new RunnableWrapper(runnable), validate(initialDelay), validate(period), TimeUnit.MILLISECONDS); } catch (Exception e) { @@ -149,6 +151,29 @@ public class ThreadPool } } + /** + * @param delay : the delay to validate. + * @return a valid value, from 0 to MAX_DELAY. + */ + private static long validate(long delay) + { + if (delay < 0) + { + final Exception e = new Exception(); + LOGGER.warning("ThreadPool found delay " + delay + "!"); + LOGGER.warning(CommonUtil.getStackTrace(e)); + return 0; + } + if (delay > MAX_DELAY) + { + final Exception e = new Exception(); + LOGGER.warning("ThreadPool found delay " + delay + "!"); + LOGGER.warning(CommonUtil.getStackTrace(e)); + return MAX_DELAY; + } + return delay; + } + public static String[] getStats() { final String[] stats = new String[(SCHEDULED_POOLS.length + INSTANT_POOLS.length) * 10]; diff --git a/L2J_Mobius_04.0_GrandCrusade/java/org/l2jmobius/commons/threads/ThreadPool.java b/L2J_Mobius_04.0_GrandCrusade/java/org/l2jmobius/commons/threads/ThreadPool.java index 7f90cf2e7a..07998e3848 100644 --- a/L2J_Mobius_04.0_GrandCrusade/java/org/l2jmobius/commons/threads/ThreadPool.java +++ b/L2J_Mobius_04.0_GrandCrusade/java/org/l2jmobius/commons/threads/ThreadPool.java @@ -24,6 +24,7 @@ import java.util.concurrent.TimeUnit; import java.util.logging.Logger; import org.l2jmobius.Config; +import org.l2jmobius.commons.util.CommonUtil; /** * This class handles thread pooling system.
@@ -40,6 +41,7 @@ public class ThreadPool private static final ScheduledThreadPoolExecutor[] SCHEDULED_POOLS = new ScheduledThreadPoolExecutor[Config.SCHEDULED_THREAD_POOL_COUNT]; private static final ThreadPoolExecutor[] INSTANT_POOLS = new ThreadPoolExecutor[Config.INSTANT_THREAD_POOL_COUNT]; + private static final long MAX_DELAY = 3155695200000L; // One hundred years. private static int SCHEDULED_THREAD_RANDOMIZER = 0; private static int INSTANT_THREAD_RANDOMIZER = 0; @@ -104,7 +106,7 @@ public class ThreadPool { try { - return SCHEDULED_POOLS[SCHEDULED_THREAD_RANDOMIZER++ % Config.SCHEDULED_THREAD_POOL_COUNT].schedule(new RunnableWrapper(runnable), delay, TimeUnit.MILLISECONDS); + return SCHEDULED_POOLS[SCHEDULED_THREAD_RANDOMIZER++ % Config.SCHEDULED_THREAD_POOL_COUNT].schedule(new RunnableWrapper(runnable), validate(delay), TimeUnit.MILLISECONDS); } catch (Exception e) { @@ -124,7 +126,7 @@ public class ThreadPool { try { - return SCHEDULED_POOLS[SCHEDULED_THREAD_RANDOMIZER++ % Config.SCHEDULED_THREAD_POOL_COUNT].scheduleAtFixedRate(new RunnableWrapper(runnable), initialDelay, period, TimeUnit.MILLISECONDS); + return SCHEDULED_POOLS[SCHEDULED_THREAD_RANDOMIZER++ % Config.SCHEDULED_THREAD_POOL_COUNT].scheduleAtFixedRate(new RunnableWrapper(runnable), validate(initialDelay), validate(period), TimeUnit.MILLISECONDS); } catch (Exception e) { @@ -149,6 +151,29 @@ public class ThreadPool } } + /** + * @param delay : the delay to validate. + * @return a valid value, from 0 to MAX_DELAY. + */ + private static long validate(long delay) + { + if (delay < 0) + { + final Exception e = new Exception(); + LOGGER.warning("ThreadPool found delay " + delay + "!"); + LOGGER.warning(CommonUtil.getStackTrace(e)); + return 0; + } + if (delay > MAX_DELAY) + { + final Exception e = new Exception(); + LOGGER.warning("ThreadPool found delay " + delay + "!"); + LOGGER.warning(CommonUtil.getStackTrace(e)); + return MAX_DELAY; + } + return delay; + } + public static String[] getStats() { final String[] stats = new String[(SCHEDULED_POOLS.length + INSTANT_POOLS.length) * 10]; diff --git a/L2J_Mobius_05.0_Salvation/java/org/l2jmobius/commons/threads/ThreadPool.java b/L2J_Mobius_05.0_Salvation/java/org/l2jmobius/commons/threads/ThreadPool.java index 7f90cf2e7a..07998e3848 100644 --- a/L2J_Mobius_05.0_Salvation/java/org/l2jmobius/commons/threads/ThreadPool.java +++ b/L2J_Mobius_05.0_Salvation/java/org/l2jmobius/commons/threads/ThreadPool.java @@ -24,6 +24,7 @@ import java.util.concurrent.TimeUnit; import java.util.logging.Logger; import org.l2jmobius.Config; +import org.l2jmobius.commons.util.CommonUtil; /** * This class handles thread pooling system.
@@ -40,6 +41,7 @@ public class ThreadPool private static final ScheduledThreadPoolExecutor[] SCHEDULED_POOLS = new ScheduledThreadPoolExecutor[Config.SCHEDULED_THREAD_POOL_COUNT]; private static final ThreadPoolExecutor[] INSTANT_POOLS = new ThreadPoolExecutor[Config.INSTANT_THREAD_POOL_COUNT]; + private static final long MAX_DELAY = 3155695200000L; // One hundred years. private static int SCHEDULED_THREAD_RANDOMIZER = 0; private static int INSTANT_THREAD_RANDOMIZER = 0; @@ -104,7 +106,7 @@ public class ThreadPool { try { - return SCHEDULED_POOLS[SCHEDULED_THREAD_RANDOMIZER++ % Config.SCHEDULED_THREAD_POOL_COUNT].schedule(new RunnableWrapper(runnable), delay, TimeUnit.MILLISECONDS); + return SCHEDULED_POOLS[SCHEDULED_THREAD_RANDOMIZER++ % Config.SCHEDULED_THREAD_POOL_COUNT].schedule(new RunnableWrapper(runnable), validate(delay), TimeUnit.MILLISECONDS); } catch (Exception e) { @@ -124,7 +126,7 @@ public class ThreadPool { try { - return SCHEDULED_POOLS[SCHEDULED_THREAD_RANDOMIZER++ % Config.SCHEDULED_THREAD_POOL_COUNT].scheduleAtFixedRate(new RunnableWrapper(runnable), initialDelay, period, TimeUnit.MILLISECONDS); + return SCHEDULED_POOLS[SCHEDULED_THREAD_RANDOMIZER++ % Config.SCHEDULED_THREAD_POOL_COUNT].scheduleAtFixedRate(new RunnableWrapper(runnable), validate(initialDelay), validate(period), TimeUnit.MILLISECONDS); } catch (Exception e) { @@ -149,6 +151,29 @@ public class ThreadPool } } + /** + * @param delay : the delay to validate. + * @return a valid value, from 0 to MAX_DELAY. + */ + private static long validate(long delay) + { + if (delay < 0) + { + final Exception e = new Exception(); + LOGGER.warning("ThreadPool found delay " + delay + "!"); + LOGGER.warning(CommonUtil.getStackTrace(e)); + return 0; + } + if (delay > MAX_DELAY) + { + final Exception e = new Exception(); + LOGGER.warning("ThreadPool found delay " + delay + "!"); + LOGGER.warning(CommonUtil.getStackTrace(e)); + return MAX_DELAY; + } + return delay; + } + public static String[] getStats() { final String[] stats = new String[(SCHEDULED_POOLS.length + INSTANT_POOLS.length) * 10]; diff --git a/L2J_Mobius_05.5_EtinasFate/java/org/l2jmobius/commons/threads/ThreadPool.java b/L2J_Mobius_05.5_EtinasFate/java/org/l2jmobius/commons/threads/ThreadPool.java index 7f90cf2e7a..07998e3848 100644 --- a/L2J_Mobius_05.5_EtinasFate/java/org/l2jmobius/commons/threads/ThreadPool.java +++ b/L2J_Mobius_05.5_EtinasFate/java/org/l2jmobius/commons/threads/ThreadPool.java @@ -24,6 +24,7 @@ import java.util.concurrent.TimeUnit; import java.util.logging.Logger; import org.l2jmobius.Config; +import org.l2jmobius.commons.util.CommonUtil; /** * This class handles thread pooling system.
@@ -40,6 +41,7 @@ public class ThreadPool private static final ScheduledThreadPoolExecutor[] SCHEDULED_POOLS = new ScheduledThreadPoolExecutor[Config.SCHEDULED_THREAD_POOL_COUNT]; private static final ThreadPoolExecutor[] INSTANT_POOLS = new ThreadPoolExecutor[Config.INSTANT_THREAD_POOL_COUNT]; + private static final long MAX_DELAY = 3155695200000L; // One hundred years. private static int SCHEDULED_THREAD_RANDOMIZER = 0; private static int INSTANT_THREAD_RANDOMIZER = 0; @@ -104,7 +106,7 @@ public class ThreadPool { try { - return SCHEDULED_POOLS[SCHEDULED_THREAD_RANDOMIZER++ % Config.SCHEDULED_THREAD_POOL_COUNT].schedule(new RunnableWrapper(runnable), delay, TimeUnit.MILLISECONDS); + return SCHEDULED_POOLS[SCHEDULED_THREAD_RANDOMIZER++ % Config.SCHEDULED_THREAD_POOL_COUNT].schedule(new RunnableWrapper(runnable), validate(delay), TimeUnit.MILLISECONDS); } catch (Exception e) { @@ -124,7 +126,7 @@ public class ThreadPool { try { - return SCHEDULED_POOLS[SCHEDULED_THREAD_RANDOMIZER++ % Config.SCHEDULED_THREAD_POOL_COUNT].scheduleAtFixedRate(new RunnableWrapper(runnable), initialDelay, period, TimeUnit.MILLISECONDS); + return SCHEDULED_POOLS[SCHEDULED_THREAD_RANDOMIZER++ % Config.SCHEDULED_THREAD_POOL_COUNT].scheduleAtFixedRate(new RunnableWrapper(runnable), validate(initialDelay), validate(period), TimeUnit.MILLISECONDS); } catch (Exception e) { @@ -149,6 +151,29 @@ public class ThreadPool } } + /** + * @param delay : the delay to validate. + * @return a valid value, from 0 to MAX_DELAY. + */ + private static long validate(long delay) + { + if (delay < 0) + { + final Exception e = new Exception(); + LOGGER.warning("ThreadPool found delay " + delay + "!"); + LOGGER.warning(CommonUtil.getStackTrace(e)); + return 0; + } + if (delay > MAX_DELAY) + { + final Exception e = new Exception(); + LOGGER.warning("ThreadPool found delay " + delay + "!"); + LOGGER.warning(CommonUtil.getStackTrace(e)); + return MAX_DELAY; + } + return delay; + } + public static String[] getStats() { final String[] stats = new String[(SCHEDULED_POOLS.length + INSTANT_POOLS.length) * 10]; diff --git a/L2J_Mobius_06.0_Fafurion/java/org/l2jmobius/commons/threads/ThreadPool.java b/L2J_Mobius_06.0_Fafurion/java/org/l2jmobius/commons/threads/ThreadPool.java index 7f90cf2e7a..07998e3848 100644 --- a/L2J_Mobius_06.0_Fafurion/java/org/l2jmobius/commons/threads/ThreadPool.java +++ b/L2J_Mobius_06.0_Fafurion/java/org/l2jmobius/commons/threads/ThreadPool.java @@ -24,6 +24,7 @@ import java.util.concurrent.TimeUnit; import java.util.logging.Logger; import org.l2jmobius.Config; +import org.l2jmobius.commons.util.CommonUtil; /** * This class handles thread pooling system.
@@ -40,6 +41,7 @@ public class ThreadPool private static final ScheduledThreadPoolExecutor[] SCHEDULED_POOLS = new ScheduledThreadPoolExecutor[Config.SCHEDULED_THREAD_POOL_COUNT]; private static final ThreadPoolExecutor[] INSTANT_POOLS = new ThreadPoolExecutor[Config.INSTANT_THREAD_POOL_COUNT]; + private static final long MAX_DELAY = 3155695200000L; // One hundred years. private static int SCHEDULED_THREAD_RANDOMIZER = 0; private static int INSTANT_THREAD_RANDOMIZER = 0; @@ -104,7 +106,7 @@ public class ThreadPool { try { - return SCHEDULED_POOLS[SCHEDULED_THREAD_RANDOMIZER++ % Config.SCHEDULED_THREAD_POOL_COUNT].schedule(new RunnableWrapper(runnable), delay, TimeUnit.MILLISECONDS); + return SCHEDULED_POOLS[SCHEDULED_THREAD_RANDOMIZER++ % Config.SCHEDULED_THREAD_POOL_COUNT].schedule(new RunnableWrapper(runnable), validate(delay), TimeUnit.MILLISECONDS); } catch (Exception e) { @@ -124,7 +126,7 @@ public class ThreadPool { try { - return SCHEDULED_POOLS[SCHEDULED_THREAD_RANDOMIZER++ % Config.SCHEDULED_THREAD_POOL_COUNT].scheduleAtFixedRate(new RunnableWrapper(runnable), initialDelay, period, TimeUnit.MILLISECONDS); + return SCHEDULED_POOLS[SCHEDULED_THREAD_RANDOMIZER++ % Config.SCHEDULED_THREAD_POOL_COUNT].scheduleAtFixedRate(new RunnableWrapper(runnable), validate(initialDelay), validate(period), TimeUnit.MILLISECONDS); } catch (Exception e) { @@ -149,6 +151,29 @@ public class ThreadPool } } + /** + * @param delay : the delay to validate. + * @return a valid value, from 0 to MAX_DELAY. + */ + private static long validate(long delay) + { + if (delay < 0) + { + final Exception e = new Exception(); + LOGGER.warning("ThreadPool found delay " + delay + "!"); + LOGGER.warning(CommonUtil.getStackTrace(e)); + return 0; + } + if (delay > MAX_DELAY) + { + final Exception e = new Exception(); + LOGGER.warning("ThreadPool found delay " + delay + "!"); + LOGGER.warning(CommonUtil.getStackTrace(e)); + return MAX_DELAY; + } + return delay; + } + public static String[] getStats() { final String[] stats = new String[(SCHEDULED_POOLS.length + INSTANT_POOLS.length) * 10]; diff --git a/L2J_Mobius_07.0_PreludeOfWar/java/org/l2jmobius/commons/threads/ThreadPool.java b/L2J_Mobius_07.0_PreludeOfWar/java/org/l2jmobius/commons/threads/ThreadPool.java index 7f90cf2e7a..07998e3848 100644 --- a/L2J_Mobius_07.0_PreludeOfWar/java/org/l2jmobius/commons/threads/ThreadPool.java +++ b/L2J_Mobius_07.0_PreludeOfWar/java/org/l2jmobius/commons/threads/ThreadPool.java @@ -24,6 +24,7 @@ import java.util.concurrent.TimeUnit; import java.util.logging.Logger; import org.l2jmobius.Config; +import org.l2jmobius.commons.util.CommonUtil; /** * This class handles thread pooling system.
@@ -40,6 +41,7 @@ public class ThreadPool private static final ScheduledThreadPoolExecutor[] SCHEDULED_POOLS = new ScheduledThreadPoolExecutor[Config.SCHEDULED_THREAD_POOL_COUNT]; private static final ThreadPoolExecutor[] INSTANT_POOLS = new ThreadPoolExecutor[Config.INSTANT_THREAD_POOL_COUNT]; + private static final long MAX_DELAY = 3155695200000L; // One hundred years. private static int SCHEDULED_THREAD_RANDOMIZER = 0; private static int INSTANT_THREAD_RANDOMIZER = 0; @@ -104,7 +106,7 @@ public class ThreadPool { try { - return SCHEDULED_POOLS[SCHEDULED_THREAD_RANDOMIZER++ % Config.SCHEDULED_THREAD_POOL_COUNT].schedule(new RunnableWrapper(runnable), delay, TimeUnit.MILLISECONDS); + return SCHEDULED_POOLS[SCHEDULED_THREAD_RANDOMIZER++ % Config.SCHEDULED_THREAD_POOL_COUNT].schedule(new RunnableWrapper(runnable), validate(delay), TimeUnit.MILLISECONDS); } catch (Exception e) { @@ -124,7 +126,7 @@ public class ThreadPool { try { - return SCHEDULED_POOLS[SCHEDULED_THREAD_RANDOMIZER++ % Config.SCHEDULED_THREAD_POOL_COUNT].scheduleAtFixedRate(new RunnableWrapper(runnable), initialDelay, period, TimeUnit.MILLISECONDS); + return SCHEDULED_POOLS[SCHEDULED_THREAD_RANDOMIZER++ % Config.SCHEDULED_THREAD_POOL_COUNT].scheduleAtFixedRate(new RunnableWrapper(runnable), validate(initialDelay), validate(period), TimeUnit.MILLISECONDS); } catch (Exception e) { @@ -149,6 +151,29 @@ public class ThreadPool } } + /** + * @param delay : the delay to validate. + * @return a valid value, from 0 to MAX_DELAY. + */ + private static long validate(long delay) + { + if (delay < 0) + { + final Exception e = new Exception(); + LOGGER.warning("ThreadPool found delay " + delay + "!"); + LOGGER.warning(CommonUtil.getStackTrace(e)); + return 0; + } + if (delay > MAX_DELAY) + { + final Exception e = new Exception(); + LOGGER.warning("ThreadPool found delay " + delay + "!"); + LOGGER.warning(CommonUtil.getStackTrace(e)); + return MAX_DELAY; + } + return delay; + } + public static String[] getStats() { final String[] stats = new String[(SCHEDULED_POOLS.length + INSTANT_POOLS.length) * 10]; diff --git a/L2J_Mobius_08.2_Homunculus/java/org/l2jmobius/commons/threads/ThreadPool.java b/L2J_Mobius_08.2_Homunculus/java/org/l2jmobius/commons/threads/ThreadPool.java index 7f90cf2e7a..07998e3848 100644 --- a/L2J_Mobius_08.2_Homunculus/java/org/l2jmobius/commons/threads/ThreadPool.java +++ b/L2J_Mobius_08.2_Homunculus/java/org/l2jmobius/commons/threads/ThreadPool.java @@ -24,6 +24,7 @@ import java.util.concurrent.TimeUnit; import java.util.logging.Logger; import org.l2jmobius.Config; +import org.l2jmobius.commons.util.CommonUtil; /** * This class handles thread pooling system.
@@ -40,6 +41,7 @@ public class ThreadPool private static final ScheduledThreadPoolExecutor[] SCHEDULED_POOLS = new ScheduledThreadPoolExecutor[Config.SCHEDULED_THREAD_POOL_COUNT]; private static final ThreadPoolExecutor[] INSTANT_POOLS = new ThreadPoolExecutor[Config.INSTANT_THREAD_POOL_COUNT]; + private static final long MAX_DELAY = 3155695200000L; // One hundred years. private static int SCHEDULED_THREAD_RANDOMIZER = 0; private static int INSTANT_THREAD_RANDOMIZER = 0; @@ -104,7 +106,7 @@ public class ThreadPool { try { - return SCHEDULED_POOLS[SCHEDULED_THREAD_RANDOMIZER++ % Config.SCHEDULED_THREAD_POOL_COUNT].schedule(new RunnableWrapper(runnable), delay, TimeUnit.MILLISECONDS); + return SCHEDULED_POOLS[SCHEDULED_THREAD_RANDOMIZER++ % Config.SCHEDULED_THREAD_POOL_COUNT].schedule(new RunnableWrapper(runnable), validate(delay), TimeUnit.MILLISECONDS); } catch (Exception e) { @@ -124,7 +126,7 @@ public class ThreadPool { try { - return SCHEDULED_POOLS[SCHEDULED_THREAD_RANDOMIZER++ % Config.SCHEDULED_THREAD_POOL_COUNT].scheduleAtFixedRate(new RunnableWrapper(runnable), initialDelay, period, TimeUnit.MILLISECONDS); + return SCHEDULED_POOLS[SCHEDULED_THREAD_RANDOMIZER++ % Config.SCHEDULED_THREAD_POOL_COUNT].scheduleAtFixedRate(new RunnableWrapper(runnable), validate(initialDelay), validate(period), TimeUnit.MILLISECONDS); } catch (Exception e) { @@ -149,6 +151,29 @@ public class ThreadPool } } + /** + * @param delay : the delay to validate. + * @return a valid value, from 0 to MAX_DELAY. + */ + private static long validate(long delay) + { + if (delay < 0) + { + final Exception e = new Exception(); + LOGGER.warning("ThreadPool found delay " + delay + "!"); + LOGGER.warning(CommonUtil.getStackTrace(e)); + return 0; + } + if (delay > MAX_DELAY) + { + final Exception e = new Exception(); + LOGGER.warning("ThreadPool found delay " + delay + "!"); + LOGGER.warning(CommonUtil.getStackTrace(e)); + return MAX_DELAY; + } + return delay; + } + public static String[] getStats() { final String[] stats = new String[(SCHEDULED_POOLS.length + INSTANT_POOLS.length) * 10]; diff --git a/L2J_Mobius_09.2_ReturnOfTheQueenAnt/java/org/l2jmobius/commons/threads/ThreadPool.java b/L2J_Mobius_09.2_ReturnOfTheQueenAnt/java/org/l2jmobius/commons/threads/ThreadPool.java index 7f90cf2e7a..07998e3848 100644 --- a/L2J_Mobius_09.2_ReturnOfTheQueenAnt/java/org/l2jmobius/commons/threads/ThreadPool.java +++ b/L2J_Mobius_09.2_ReturnOfTheQueenAnt/java/org/l2jmobius/commons/threads/ThreadPool.java @@ -24,6 +24,7 @@ import java.util.concurrent.TimeUnit; import java.util.logging.Logger; import org.l2jmobius.Config; +import org.l2jmobius.commons.util.CommonUtil; /** * This class handles thread pooling system.
@@ -40,6 +41,7 @@ public class ThreadPool private static final ScheduledThreadPoolExecutor[] SCHEDULED_POOLS = new ScheduledThreadPoolExecutor[Config.SCHEDULED_THREAD_POOL_COUNT]; private static final ThreadPoolExecutor[] INSTANT_POOLS = new ThreadPoolExecutor[Config.INSTANT_THREAD_POOL_COUNT]; + private static final long MAX_DELAY = 3155695200000L; // One hundred years. private static int SCHEDULED_THREAD_RANDOMIZER = 0; private static int INSTANT_THREAD_RANDOMIZER = 0; @@ -104,7 +106,7 @@ public class ThreadPool { try { - return SCHEDULED_POOLS[SCHEDULED_THREAD_RANDOMIZER++ % Config.SCHEDULED_THREAD_POOL_COUNT].schedule(new RunnableWrapper(runnable), delay, TimeUnit.MILLISECONDS); + return SCHEDULED_POOLS[SCHEDULED_THREAD_RANDOMIZER++ % Config.SCHEDULED_THREAD_POOL_COUNT].schedule(new RunnableWrapper(runnable), validate(delay), TimeUnit.MILLISECONDS); } catch (Exception e) { @@ -124,7 +126,7 @@ public class ThreadPool { try { - return SCHEDULED_POOLS[SCHEDULED_THREAD_RANDOMIZER++ % Config.SCHEDULED_THREAD_POOL_COUNT].scheduleAtFixedRate(new RunnableWrapper(runnable), initialDelay, period, TimeUnit.MILLISECONDS); + return SCHEDULED_POOLS[SCHEDULED_THREAD_RANDOMIZER++ % Config.SCHEDULED_THREAD_POOL_COUNT].scheduleAtFixedRate(new RunnableWrapper(runnable), validate(initialDelay), validate(period), TimeUnit.MILLISECONDS); } catch (Exception e) { @@ -149,6 +151,29 @@ public class ThreadPool } } + /** + * @param delay : the delay to validate. + * @return a valid value, from 0 to MAX_DELAY. + */ + private static long validate(long delay) + { + if (delay < 0) + { + final Exception e = new Exception(); + LOGGER.warning("ThreadPool found delay " + delay + "!"); + LOGGER.warning(CommonUtil.getStackTrace(e)); + return 0; + } + if (delay > MAX_DELAY) + { + final Exception e = new Exception(); + LOGGER.warning("ThreadPool found delay " + delay + "!"); + LOGGER.warning(CommonUtil.getStackTrace(e)); + return MAX_DELAY; + } + return delay; + } + public static String[] getStats() { final String[] stats = new String[(SCHEDULED_POOLS.length + INSTANT_POOLS.length) * 10]; diff --git a/L2J_Mobius_10.2_MasterClass/java/org/l2jmobius/commons/threads/ThreadPool.java b/L2J_Mobius_10.2_MasterClass/java/org/l2jmobius/commons/threads/ThreadPool.java index 7f90cf2e7a..07998e3848 100644 --- a/L2J_Mobius_10.2_MasterClass/java/org/l2jmobius/commons/threads/ThreadPool.java +++ b/L2J_Mobius_10.2_MasterClass/java/org/l2jmobius/commons/threads/ThreadPool.java @@ -24,6 +24,7 @@ import java.util.concurrent.TimeUnit; import java.util.logging.Logger; import org.l2jmobius.Config; +import org.l2jmobius.commons.util.CommonUtil; /** * This class handles thread pooling system.
@@ -40,6 +41,7 @@ public class ThreadPool private static final ScheduledThreadPoolExecutor[] SCHEDULED_POOLS = new ScheduledThreadPoolExecutor[Config.SCHEDULED_THREAD_POOL_COUNT]; private static final ThreadPoolExecutor[] INSTANT_POOLS = new ThreadPoolExecutor[Config.INSTANT_THREAD_POOL_COUNT]; + private static final long MAX_DELAY = 3155695200000L; // One hundred years. private static int SCHEDULED_THREAD_RANDOMIZER = 0; private static int INSTANT_THREAD_RANDOMIZER = 0; @@ -104,7 +106,7 @@ public class ThreadPool { try { - return SCHEDULED_POOLS[SCHEDULED_THREAD_RANDOMIZER++ % Config.SCHEDULED_THREAD_POOL_COUNT].schedule(new RunnableWrapper(runnable), delay, TimeUnit.MILLISECONDS); + return SCHEDULED_POOLS[SCHEDULED_THREAD_RANDOMIZER++ % Config.SCHEDULED_THREAD_POOL_COUNT].schedule(new RunnableWrapper(runnable), validate(delay), TimeUnit.MILLISECONDS); } catch (Exception e) { @@ -124,7 +126,7 @@ public class ThreadPool { try { - return SCHEDULED_POOLS[SCHEDULED_THREAD_RANDOMIZER++ % Config.SCHEDULED_THREAD_POOL_COUNT].scheduleAtFixedRate(new RunnableWrapper(runnable), initialDelay, period, TimeUnit.MILLISECONDS); + return SCHEDULED_POOLS[SCHEDULED_THREAD_RANDOMIZER++ % Config.SCHEDULED_THREAD_POOL_COUNT].scheduleAtFixedRate(new RunnableWrapper(runnable), validate(initialDelay), validate(period), TimeUnit.MILLISECONDS); } catch (Exception e) { @@ -149,6 +151,29 @@ public class ThreadPool } } + /** + * @param delay : the delay to validate. + * @return a valid value, from 0 to MAX_DELAY. + */ + private static long validate(long delay) + { + if (delay < 0) + { + final Exception e = new Exception(); + LOGGER.warning("ThreadPool found delay " + delay + "!"); + LOGGER.warning(CommonUtil.getStackTrace(e)); + return 0; + } + if (delay > MAX_DELAY) + { + final Exception e = new Exception(); + LOGGER.warning("ThreadPool found delay " + delay + "!"); + LOGGER.warning(CommonUtil.getStackTrace(e)); + return MAX_DELAY; + } + return delay; + } + public static String[] getStats() { final String[] stats = new String[(SCHEDULED_POOLS.length + INSTANT_POOLS.length) * 10]; diff --git a/L2J_Mobius_C1_HarbingersOfWar/java/org/l2jmobius/gameserver/threads/ThreadPool.java b/L2J_Mobius_C1_HarbingersOfWar/java/org/l2jmobius/gameserver/threads/ThreadPool.java index fcba5122f8..1df43d6b22 100644 --- a/L2J_Mobius_C1_HarbingersOfWar/java/org/l2jmobius/gameserver/threads/ThreadPool.java +++ b/L2J_Mobius_C1_HarbingersOfWar/java/org/l2jmobius/gameserver/threads/ThreadPool.java @@ -25,6 +25,7 @@ import java.util.concurrent.TimeUnit; import java.util.logging.Logger; import org.l2jmobius.Config; +import org.l2jmobius.util.Util; /** * This class handles thread pooling system.
@@ -41,6 +42,7 @@ public class ThreadPool private static final ScheduledThreadPoolExecutor[] SCHEDULED_POOLS = new ScheduledThreadPoolExecutor[Config.SCHEDULED_THREAD_POOL_COUNT]; private static final ThreadPoolExecutor[] INSTANT_POOLS = new ThreadPoolExecutor[Config.INSTANT_THREAD_POOL_COUNT]; + private static final long MAX_DELAY = 3155695200000L; // One hundred years. private static int SCHEDULED_THREAD_RANDOMIZER = 0; private static int INSTANT_THREAD_RANDOMIZER = 0; @@ -105,7 +107,7 @@ public class ThreadPool { try { - return SCHEDULED_POOLS[SCHEDULED_THREAD_RANDOMIZER++ % Config.SCHEDULED_THREAD_POOL_COUNT].schedule(new RunnableWrapper(runnable), delay, TimeUnit.MILLISECONDS); + return SCHEDULED_POOLS[SCHEDULED_THREAD_RANDOMIZER++ % Config.SCHEDULED_THREAD_POOL_COUNT].schedule(new RunnableWrapper(runnable), validate(delay), TimeUnit.MILLISECONDS); } catch (Exception e) { @@ -125,7 +127,7 @@ public class ThreadPool { try { - return SCHEDULED_POOLS[SCHEDULED_THREAD_RANDOMIZER++ % Config.SCHEDULED_THREAD_POOL_COUNT].scheduleAtFixedRate(new RunnableWrapper(runnable), initialDelay, period, TimeUnit.MILLISECONDS); + return SCHEDULED_POOLS[SCHEDULED_THREAD_RANDOMIZER++ % Config.SCHEDULED_THREAD_POOL_COUNT].scheduleAtFixedRate(new RunnableWrapper(runnable), validate(initialDelay), validate(period), TimeUnit.MILLISECONDS); } catch (Exception e) { @@ -150,6 +152,29 @@ public class ThreadPool } } + /** + * @param delay : the delay to validate. + * @return a valid value, from 0 to MAX_DELAY. + */ + private static long validate(long delay) + { + if (delay < 0) + { + final Exception e = new Exception(); + LOGGER.warning("ThreadPool found delay " + delay + "!"); + LOGGER.warning(Util.getStackTrace(e)); + return 0; + } + if (delay > MAX_DELAY) + { + final Exception e = new Exception(); + LOGGER.warning("ThreadPool found delay " + delay + "!"); + LOGGER.warning(Util.getStackTrace(e)); + return MAX_DELAY; + } + return delay; + } + public static String[] getStats() { final String[] stats = new String[(SCHEDULED_POOLS.length + INSTANT_POOLS.length) * 10]; diff --git a/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/commons/threads/ThreadPool.java b/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/commons/threads/ThreadPool.java index 7f90cf2e7a..07998e3848 100644 --- a/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/commons/threads/ThreadPool.java +++ b/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/commons/threads/ThreadPool.java @@ -24,6 +24,7 @@ import java.util.concurrent.TimeUnit; import java.util.logging.Logger; import org.l2jmobius.Config; +import org.l2jmobius.commons.util.CommonUtil; /** * This class handles thread pooling system.
@@ -40,6 +41,7 @@ public class ThreadPool private static final ScheduledThreadPoolExecutor[] SCHEDULED_POOLS = new ScheduledThreadPoolExecutor[Config.SCHEDULED_THREAD_POOL_COUNT]; private static final ThreadPoolExecutor[] INSTANT_POOLS = new ThreadPoolExecutor[Config.INSTANT_THREAD_POOL_COUNT]; + private static final long MAX_DELAY = 3155695200000L; // One hundred years. private static int SCHEDULED_THREAD_RANDOMIZER = 0; private static int INSTANT_THREAD_RANDOMIZER = 0; @@ -104,7 +106,7 @@ public class ThreadPool { try { - return SCHEDULED_POOLS[SCHEDULED_THREAD_RANDOMIZER++ % Config.SCHEDULED_THREAD_POOL_COUNT].schedule(new RunnableWrapper(runnable), delay, TimeUnit.MILLISECONDS); + return SCHEDULED_POOLS[SCHEDULED_THREAD_RANDOMIZER++ % Config.SCHEDULED_THREAD_POOL_COUNT].schedule(new RunnableWrapper(runnable), validate(delay), TimeUnit.MILLISECONDS); } catch (Exception e) { @@ -124,7 +126,7 @@ public class ThreadPool { try { - return SCHEDULED_POOLS[SCHEDULED_THREAD_RANDOMIZER++ % Config.SCHEDULED_THREAD_POOL_COUNT].scheduleAtFixedRate(new RunnableWrapper(runnable), initialDelay, period, TimeUnit.MILLISECONDS); + return SCHEDULED_POOLS[SCHEDULED_THREAD_RANDOMIZER++ % Config.SCHEDULED_THREAD_POOL_COUNT].scheduleAtFixedRate(new RunnableWrapper(runnable), validate(initialDelay), validate(period), TimeUnit.MILLISECONDS); } catch (Exception e) { @@ -149,6 +151,29 @@ public class ThreadPool } } + /** + * @param delay : the delay to validate. + * @return a valid value, from 0 to MAX_DELAY. + */ + private static long validate(long delay) + { + if (delay < 0) + { + final Exception e = new Exception(); + LOGGER.warning("ThreadPool found delay " + delay + "!"); + LOGGER.warning(CommonUtil.getStackTrace(e)); + return 0; + } + if (delay > MAX_DELAY) + { + final Exception e = new Exception(); + LOGGER.warning("ThreadPool found delay " + delay + "!"); + LOGGER.warning(CommonUtil.getStackTrace(e)); + return MAX_DELAY; + } + return delay; + } + public static String[] getStats() { final String[] stats = new String[(SCHEDULED_POOLS.length + INSTANT_POOLS.length) * 10]; diff --git a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/commons/threads/ThreadPool.java b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/commons/threads/ThreadPool.java index 7f90cf2e7a..07998e3848 100644 --- a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/commons/threads/ThreadPool.java +++ b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/commons/threads/ThreadPool.java @@ -24,6 +24,7 @@ import java.util.concurrent.TimeUnit; import java.util.logging.Logger; import org.l2jmobius.Config; +import org.l2jmobius.commons.util.CommonUtil; /** * This class handles thread pooling system.
@@ -40,6 +41,7 @@ public class ThreadPool private static final ScheduledThreadPoolExecutor[] SCHEDULED_POOLS = new ScheduledThreadPoolExecutor[Config.SCHEDULED_THREAD_POOL_COUNT]; private static final ThreadPoolExecutor[] INSTANT_POOLS = new ThreadPoolExecutor[Config.INSTANT_THREAD_POOL_COUNT]; + private static final long MAX_DELAY = 3155695200000L; // One hundred years. private static int SCHEDULED_THREAD_RANDOMIZER = 0; private static int INSTANT_THREAD_RANDOMIZER = 0; @@ -104,7 +106,7 @@ public class ThreadPool { try { - return SCHEDULED_POOLS[SCHEDULED_THREAD_RANDOMIZER++ % Config.SCHEDULED_THREAD_POOL_COUNT].schedule(new RunnableWrapper(runnable), delay, TimeUnit.MILLISECONDS); + return SCHEDULED_POOLS[SCHEDULED_THREAD_RANDOMIZER++ % Config.SCHEDULED_THREAD_POOL_COUNT].schedule(new RunnableWrapper(runnable), validate(delay), TimeUnit.MILLISECONDS); } catch (Exception e) { @@ -124,7 +126,7 @@ public class ThreadPool { try { - return SCHEDULED_POOLS[SCHEDULED_THREAD_RANDOMIZER++ % Config.SCHEDULED_THREAD_POOL_COUNT].scheduleAtFixedRate(new RunnableWrapper(runnable), initialDelay, period, TimeUnit.MILLISECONDS); + return SCHEDULED_POOLS[SCHEDULED_THREAD_RANDOMIZER++ % Config.SCHEDULED_THREAD_POOL_COUNT].scheduleAtFixedRate(new RunnableWrapper(runnable), validate(initialDelay), validate(period), TimeUnit.MILLISECONDS); } catch (Exception e) { @@ -149,6 +151,29 @@ public class ThreadPool } } + /** + * @param delay : the delay to validate. + * @return a valid value, from 0 to MAX_DELAY. + */ + private static long validate(long delay) + { + if (delay < 0) + { + final Exception e = new Exception(); + LOGGER.warning("ThreadPool found delay " + delay + "!"); + LOGGER.warning(CommonUtil.getStackTrace(e)); + return 0; + } + if (delay > MAX_DELAY) + { + final Exception e = new Exception(); + LOGGER.warning("ThreadPool found delay " + delay + "!"); + LOGGER.warning(CommonUtil.getStackTrace(e)); + return MAX_DELAY; + } + return delay; + } + public static String[] getStats() { final String[] stats = new String[(SCHEDULED_POOLS.length + INSTANT_POOLS.length) * 10]; diff --git a/L2J_Mobius_CT_0_Interlude/java/org/l2jmobius/commons/threads/ThreadPool.java b/L2J_Mobius_CT_0_Interlude/java/org/l2jmobius/commons/threads/ThreadPool.java index 7f90cf2e7a..07998e3848 100644 --- a/L2J_Mobius_CT_0_Interlude/java/org/l2jmobius/commons/threads/ThreadPool.java +++ b/L2J_Mobius_CT_0_Interlude/java/org/l2jmobius/commons/threads/ThreadPool.java @@ -24,6 +24,7 @@ import java.util.concurrent.TimeUnit; import java.util.logging.Logger; import org.l2jmobius.Config; +import org.l2jmobius.commons.util.CommonUtil; /** * This class handles thread pooling system.
@@ -40,6 +41,7 @@ public class ThreadPool private static final ScheduledThreadPoolExecutor[] SCHEDULED_POOLS = new ScheduledThreadPoolExecutor[Config.SCHEDULED_THREAD_POOL_COUNT]; private static final ThreadPoolExecutor[] INSTANT_POOLS = new ThreadPoolExecutor[Config.INSTANT_THREAD_POOL_COUNT]; + private static final long MAX_DELAY = 3155695200000L; // One hundred years. private static int SCHEDULED_THREAD_RANDOMIZER = 0; private static int INSTANT_THREAD_RANDOMIZER = 0; @@ -104,7 +106,7 @@ public class ThreadPool { try { - return SCHEDULED_POOLS[SCHEDULED_THREAD_RANDOMIZER++ % Config.SCHEDULED_THREAD_POOL_COUNT].schedule(new RunnableWrapper(runnable), delay, TimeUnit.MILLISECONDS); + return SCHEDULED_POOLS[SCHEDULED_THREAD_RANDOMIZER++ % Config.SCHEDULED_THREAD_POOL_COUNT].schedule(new RunnableWrapper(runnable), validate(delay), TimeUnit.MILLISECONDS); } catch (Exception e) { @@ -124,7 +126,7 @@ public class ThreadPool { try { - return SCHEDULED_POOLS[SCHEDULED_THREAD_RANDOMIZER++ % Config.SCHEDULED_THREAD_POOL_COUNT].scheduleAtFixedRate(new RunnableWrapper(runnable), initialDelay, period, TimeUnit.MILLISECONDS); + return SCHEDULED_POOLS[SCHEDULED_THREAD_RANDOMIZER++ % Config.SCHEDULED_THREAD_POOL_COUNT].scheduleAtFixedRate(new RunnableWrapper(runnable), validate(initialDelay), validate(period), TimeUnit.MILLISECONDS); } catch (Exception e) { @@ -149,6 +151,29 @@ public class ThreadPool } } + /** + * @param delay : the delay to validate. + * @return a valid value, from 0 to MAX_DELAY. + */ + private static long validate(long delay) + { + if (delay < 0) + { + final Exception e = new Exception(); + LOGGER.warning("ThreadPool found delay " + delay + "!"); + LOGGER.warning(CommonUtil.getStackTrace(e)); + return 0; + } + if (delay > MAX_DELAY) + { + final Exception e = new Exception(); + LOGGER.warning("ThreadPool found delay " + delay + "!"); + LOGGER.warning(CommonUtil.getStackTrace(e)); + return MAX_DELAY; + } + return delay; + } + public static String[] getStats() { final String[] stats = new String[(SCHEDULED_POOLS.length + INSTANT_POOLS.length) * 10]; diff --git a/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/commons/threads/ThreadPool.java b/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/commons/threads/ThreadPool.java index 7f90cf2e7a..07998e3848 100644 --- a/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/commons/threads/ThreadPool.java +++ b/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/commons/threads/ThreadPool.java @@ -24,6 +24,7 @@ import java.util.concurrent.TimeUnit; import java.util.logging.Logger; import org.l2jmobius.Config; +import org.l2jmobius.commons.util.CommonUtil; /** * This class handles thread pooling system.
@@ -40,6 +41,7 @@ public class ThreadPool private static final ScheduledThreadPoolExecutor[] SCHEDULED_POOLS = new ScheduledThreadPoolExecutor[Config.SCHEDULED_THREAD_POOL_COUNT]; private static final ThreadPoolExecutor[] INSTANT_POOLS = new ThreadPoolExecutor[Config.INSTANT_THREAD_POOL_COUNT]; + private static final long MAX_DELAY = 3155695200000L; // One hundred years. private static int SCHEDULED_THREAD_RANDOMIZER = 0; private static int INSTANT_THREAD_RANDOMIZER = 0; @@ -104,7 +106,7 @@ public class ThreadPool { try { - return SCHEDULED_POOLS[SCHEDULED_THREAD_RANDOMIZER++ % Config.SCHEDULED_THREAD_POOL_COUNT].schedule(new RunnableWrapper(runnable), delay, TimeUnit.MILLISECONDS); + return SCHEDULED_POOLS[SCHEDULED_THREAD_RANDOMIZER++ % Config.SCHEDULED_THREAD_POOL_COUNT].schedule(new RunnableWrapper(runnable), validate(delay), TimeUnit.MILLISECONDS); } catch (Exception e) { @@ -124,7 +126,7 @@ public class ThreadPool { try { - return SCHEDULED_POOLS[SCHEDULED_THREAD_RANDOMIZER++ % Config.SCHEDULED_THREAD_POOL_COUNT].scheduleAtFixedRate(new RunnableWrapper(runnable), initialDelay, period, TimeUnit.MILLISECONDS); + return SCHEDULED_POOLS[SCHEDULED_THREAD_RANDOMIZER++ % Config.SCHEDULED_THREAD_POOL_COUNT].scheduleAtFixedRate(new RunnableWrapper(runnable), validate(initialDelay), validate(period), TimeUnit.MILLISECONDS); } catch (Exception e) { @@ -149,6 +151,29 @@ public class ThreadPool } } + /** + * @param delay : the delay to validate. + * @return a valid value, from 0 to MAX_DELAY. + */ + private static long validate(long delay) + { + if (delay < 0) + { + final Exception e = new Exception(); + LOGGER.warning("ThreadPool found delay " + delay + "!"); + LOGGER.warning(CommonUtil.getStackTrace(e)); + return 0; + } + if (delay > MAX_DELAY) + { + final Exception e = new Exception(); + LOGGER.warning("ThreadPool found delay " + delay + "!"); + LOGGER.warning(CommonUtil.getStackTrace(e)); + return MAX_DELAY; + } + return delay; + } + public static String[] getStats() { final String[] stats = new String[(SCHEDULED_POOLS.length + INSTANT_POOLS.length) * 10]; diff --git a/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/commons/threads/ThreadPool.java b/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/commons/threads/ThreadPool.java index 7f90cf2e7a..07998e3848 100644 --- a/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/commons/threads/ThreadPool.java +++ b/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/commons/threads/ThreadPool.java @@ -24,6 +24,7 @@ import java.util.concurrent.TimeUnit; import java.util.logging.Logger; import org.l2jmobius.Config; +import org.l2jmobius.commons.util.CommonUtil; /** * This class handles thread pooling system.
@@ -40,6 +41,7 @@ public class ThreadPool private static final ScheduledThreadPoolExecutor[] SCHEDULED_POOLS = new ScheduledThreadPoolExecutor[Config.SCHEDULED_THREAD_POOL_COUNT]; private static final ThreadPoolExecutor[] INSTANT_POOLS = new ThreadPoolExecutor[Config.INSTANT_THREAD_POOL_COUNT]; + private static final long MAX_DELAY = 3155695200000L; // One hundred years. private static int SCHEDULED_THREAD_RANDOMIZER = 0; private static int INSTANT_THREAD_RANDOMIZER = 0; @@ -104,7 +106,7 @@ public class ThreadPool { try { - return SCHEDULED_POOLS[SCHEDULED_THREAD_RANDOMIZER++ % Config.SCHEDULED_THREAD_POOL_COUNT].schedule(new RunnableWrapper(runnable), delay, TimeUnit.MILLISECONDS); + return SCHEDULED_POOLS[SCHEDULED_THREAD_RANDOMIZER++ % Config.SCHEDULED_THREAD_POOL_COUNT].schedule(new RunnableWrapper(runnable), validate(delay), TimeUnit.MILLISECONDS); } catch (Exception e) { @@ -124,7 +126,7 @@ public class ThreadPool { try { - return SCHEDULED_POOLS[SCHEDULED_THREAD_RANDOMIZER++ % Config.SCHEDULED_THREAD_POOL_COUNT].scheduleAtFixedRate(new RunnableWrapper(runnable), initialDelay, period, TimeUnit.MILLISECONDS); + return SCHEDULED_POOLS[SCHEDULED_THREAD_RANDOMIZER++ % Config.SCHEDULED_THREAD_POOL_COUNT].scheduleAtFixedRate(new RunnableWrapper(runnable), validate(initialDelay), validate(period), TimeUnit.MILLISECONDS); } catch (Exception e) { @@ -149,6 +151,29 @@ public class ThreadPool } } + /** + * @param delay : the delay to validate. + * @return a valid value, from 0 to MAX_DELAY. + */ + private static long validate(long delay) + { + if (delay < 0) + { + final Exception e = new Exception(); + LOGGER.warning("ThreadPool found delay " + delay + "!"); + LOGGER.warning(CommonUtil.getStackTrace(e)); + return 0; + } + if (delay > MAX_DELAY) + { + final Exception e = new Exception(); + LOGGER.warning("ThreadPool found delay " + delay + "!"); + LOGGER.warning(CommonUtil.getStackTrace(e)); + return MAX_DELAY; + } + return delay; + } + public static String[] getStats() { final String[] stats = new String[(SCHEDULED_POOLS.length + INSTANT_POOLS.length) * 10]; diff --git a/L2J_Mobius_Classic_1.0/java/org/l2jmobius/commons/threads/ThreadPool.java b/L2J_Mobius_Classic_1.0/java/org/l2jmobius/commons/threads/ThreadPool.java index 7f90cf2e7a..07998e3848 100644 --- a/L2J_Mobius_Classic_1.0/java/org/l2jmobius/commons/threads/ThreadPool.java +++ b/L2J_Mobius_Classic_1.0/java/org/l2jmobius/commons/threads/ThreadPool.java @@ -24,6 +24,7 @@ import java.util.concurrent.TimeUnit; import java.util.logging.Logger; import org.l2jmobius.Config; +import org.l2jmobius.commons.util.CommonUtil; /** * This class handles thread pooling system.
@@ -40,6 +41,7 @@ public class ThreadPool private static final ScheduledThreadPoolExecutor[] SCHEDULED_POOLS = new ScheduledThreadPoolExecutor[Config.SCHEDULED_THREAD_POOL_COUNT]; private static final ThreadPoolExecutor[] INSTANT_POOLS = new ThreadPoolExecutor[Config.INSTANT_THREAD_POOL_COUNT]; + private static final long MAX_DELAY = 3155695200000L; // One hundred years. private static int SCHEDULED_THREAD_RANDOMIZER = 0; private static int INSTANT_THREAD_RANDOMIZER = 0; @@ -104,7 +106,7 @@ public class ThreadPool { try { - return SCHEDULED_POOLS[SCHEDULED_THREAD_RANDOMIZER++ % Config.SCHEDULED_THREAD_POOL_COUNT].schedule(new RunnableWrapper(runnable), delay, TimeUnit.MILLISECONDS); + return SCHEDULED_POOLS[SCHEDULED_THREAD_RANDOMIZER++ % Config.SCHEDULED_THREAD_POOL_COUNT].schedule(new RunnableWrapper(runnable), validate(delay), TimeUnit.MILLISECONDS); } catch (Exception e) { @@ -124,7 +126,7 @@ public class ThreadPool { try { - return SCHEDULED_POOLS[SCHEDULED_THREAD_RANDOMIZER++ % Config.SCHEDULED_THREAD_POOL_COUNT].scheduleAtFixedRate(new RunnableWrapper(runnable), initialDelay, period, TimeUnit.MILLISECONDS); + return SCHEDULED_POOLS[SCHEDULED_THREAD_RANDOMIZER++ % Config.SCHEDULED_THREAD_POOL_COUNT].scheduleAtFixedRate(new RunnableWrapper(runnable), validate(initialDelay), validate(period), TimeUnit.MILLISECONDS); } catch (Exception e) { @@ -149,6 +151,29 @@ public class ThreadPool } } + /** + * @param delay : the delay to validate. + * @return a valid value, from 0 to MAX_DELAY. + */ + private static long validate(long delay) + { + if (delay < 0) + { + final Exception e = new Exception(); + LOGGER.warning("ThreadPool found delay " + delay + "!"); + LOGGER.warning(CommonUtil.getStackTrace(e)); + return 0; + } + if (delay > MAX_DELAY) + { + final Exception e = new Exception(); + LOGGER.warning("ThreadPool found delay " + delay + "!"); + LOGGER.warning(CommonUtil.getStackTrace(e)); + return MAX_DELAY; + } + return delay; + } + public static String[] getStats() { final String[] stats = new String[(SCHEDULED_POOLS.length + INSTANT_POOLS.length) * 10]; diff --git a/L2J_Mobius_Classic_1.5_AgeOfSplendor/java/org/l2jmobius/commons/threads/ThreadPool.java b/L2J_Mobius_Classic_1.5_AgeOfSplendor/java/org/l2jmobius/commons/threads/ThreadPool.java index 7f90cf2e7a..07998e3848 100644 --- a/L2J_Mobius_Classic_1.5_AgeOfSplendor/java/org/l2jmobius/commons/threads/ThreadPool.java +++ b/L2J_Mobius_Classic_1.5_AgeOfSplendor/java/org/l2jmobius/commons/threads/ThreadPool.java @@ -24,6 +24,7 @@ import java.util.concurrent.TimeUnit; import java.util.logging.Logger; import org.l2jmobius.Config; +import org.l2jmobius.commons.util.CommonUtil; /** * This class handles thread pooling system.
@@ -40,6 +41,7 @@ public class ThreadPool private static final ScheduledThreadPoolExecutor[] SCHEDULED_POOLS = new ScheduledThreadPoolExecutor[Config.SCHEDULED_THREAD_POOL_COUNT]; private static final ThreadPoolExecutor[] INSTANT_POOLS = new ThreadPoolExecutor[Config.INSTANT_THREAD_POOL_COUNT]; + private static final long MAX_DELAY = 3155695200000L; // One hundred years. private static int SCHEDULED_THREAD_RANDOMIZER = 0; private static int INSTANT_THREAD_RANDOMIZER = 0; @@ -104,7 +106,7 @@ public class ThreadPool { try { - return SCHEDULED_POOLS[SCHEDULED_THREAD_RANDOMIZER++ % Config.SCHEDULED_THREAD_POOL_COUNT].schedule(new RunnableWrapper(runnable), delay, TimeUnit.MILLISECONDS); + return SCHEDULED_POOLS[SCHEDULED_THREAD_RANDOMIZER++ % Config.SCHEDULED_THREAD_POOL_COUNT].schedule(new RunnableWrapper(runnable), validate(delay), TimeUnit.MILLISECONDS); } catch (Exception e) { @@ -124,7 +126,7 @@ public class ThreadPool { try { - return SCHEDULED_POOLS[SCHEDULED_THREAD_RANDOMIZER++ % Config.SCHEDULED_THREAD_POOL_COUNT].scheduleAtFixedRate(new RunnableWrapper(runnable), initialDelay, period, TimeUnit.MILLISECONDS); + return SCHEDULED_POOLS[SCHEDULED_THREAD_RANDOMIZER++ % Config.SCHEDULED_THREAD_POOL_COUNT].scheduleAtFixedRate(new RunnableWrapper(runnable), validate(initialDelay), validate(period), TimeUnit.MILLISECONDS); } catch (Exception e) { @@ -149,6 +151,29 @@ public class ThreadPool } } + /** + * @param delay : the delay to validate. + * @return a valid value, from 0 to MAX_DELAY. + */ + private static long validate(long delay) + { + if (delay < 0) + { + final Exception e = new Exception(); + LOGGER.warning("ThreadPool found delay " + delay + "!"); + LOGGER.warning(CommonUtil.getStackTrace(e)); + return 0; + } + if (delay > MAX_DELAY) + { + final Exception e = new Exception(); + LOGGER.warning("ThreadPool found delay " + delay + "!"); + LOGGER.warning(CommonUtil.getStackTrace(e)); + return MAX_DELAY; + } + return delay; + } + public static String[] getStats() { final String[] stats = new String[(SCHEDULED_POOLS.length + INSTANT_POOLS.length) * 10]; diff --git a/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/commons/threads/ThreadPool.java b/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/commons/threads/ThreadPool.java index 7f90cf2e7a..07998e3848 100644 --- a/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/commons/threads/ThreadPool.java +++ b/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/commons/threads/ThreadPool.java @@ -24,6 +24,7 @@ import java.util.concurrent.TimeUnit; import java.util.logging.Logger; import org.l2jmobius.Config; +import org.l2jmobius.commons.util.CommonUtil; /** * This class handles thread pooling system.
@@ -40,6 +41,7 @@ public class ThreadPool private static final ScheduledThreadPoolExecutor[] SCHEDULED_POOLS = new ScheduledThreadPoolExecutor[Config.SCHEDULED_THREAD_POOL_COUNT]; private static final ThreadPoolExecutor[] INSTANT_POOLS = new ThreadPoolExecutor[Config.INSTANT_THREAD_POOL_COUNT]; + private static final long MAX_DELAY = 3155695200000L; // One hundred years. private static int SCHEDULED_THREAD_RANDOMIZER = 0; private static int INSTANT_THREAD_RANDOMIZER = 0; @@ -104,7 +106,7 @@ public class ThreadPool { try { - return SCHEDULED_POOLS[SCHEDULED_THREAD_RANDOMIZER++ % Config.SCHEDULED_THREAD_POOL_COUNT].schedule(new RunnableWrapper(runnable), delay, TimeUnit.MILLISECONDS); + return SCHEDULED_POOLS[SCHEDULED_THREAD_RANDOMIZER++ % Config.SCHEDULED_THREAD_POOL_COUNT].schedule(new RunnableWrapper(runnable), validate(delay), TimeUnit.MILLISECONDS); } catch (Exception e) { @@ -124,7 +126,7 @@ public class ThreadPool { try { - return SCHEDULED_POOLS[SCHEDULED_THREAD_RANDOMIZER++ % Config.SCHEDULED_THREAD_POOL_COUNT].scheduleAtFixedRate(new RunnableWrapper(runnable), initialDelay, period, TimeUnit.MILLISECONDS); + return SCHEDULED_POOLS[SCHEDULED_THREAD_RANDOMIZER++ % Config.SCHEDULED_THREAD_POOL_COUNT].scheduleAtFixedRate(new RunnableWrapper(runnable), validate(initialDelay), validate(period), TimeUnit.MILLISECONDS); } catch (Exception e) { @@ -149,6 +151,29 @@ public class ThreadPool } } + /** + * @param delay : the delay to validate. + * @return a valid value, from 0 to MAX_DELAY. + */ + private static long validate(long delay) + { + if (delay < 0) + { + final Exception e = new Exception(); + LOGGER.warning("ThreadPool found delay " + delay + "!"); + LOGGER.warning(CommonUtil.getStackTrace(e)); + return 0; + } + if (delay > MAX_DELAY) + { + final Exception e = new Exception(); + LOGGER.warning("ThreadPool found delay " + delay + "!"); + LOGGER.warning(CommonUtil.getStackTrace(e)); + return MAX_DELAY; + } + return delay; + } + public static String[] getStats() { final String[] stats = new String[(SCHEDULED_POOLS.length + INSTANT_POOLS.length) * 10]; diff --git a/L2J_Mobius_Classic_2.5_Zaken/java/org/l2jmobius/commons/threads/ThreadPool.java b/L2J_Mobius_Classic_2.5_Zaken/java/org/l2jmobius/commons/threads/ThreadPool.java index 7f90cf2e7a..07998e3848 100644 --- a/L2J_Mobius_Classic_2.5_Zaken/java/org/l2jmobius/commons/threads/ThreadPool.java +++ b/L2J_Mobius_Classic_2.5_Zaken/java/org/l2jmobius/commons/threads/ThreadPool.java @@ -24,6 +24,7 @@ import java.util.concurrent.TimeUnit; import java.util.logging.Logger; import org.l2jmobius.Config; +import org.l2jmobius.commons.util.CommonUtil; /** * This class handles thread pooling system.
@@ -40,6 +41,7 @@ public class ThreadPool private static final ScheduledThreadPoolExecutor[] SCHEDULED_POOLS = new ScheduledThreadPoolExecutor[Config.SCHEDULED_THREAD_POOL_COUNT]; private static final ThreadPoolExecutor[] INSTANT_POOLS = new ThreadPoolExecutor[Config.INSTANT_THREAD_POOL_COUNT]; + private static final long MAX_DELAY = 3155695200000L; // One hundred years. private static int SCHEDULED_THREAD_RANDOMIZER = 0; private static int INSTANT_THREAD_RANDOMIZER = 0; @@ -104,7 +106,7 @@ public class ThreadPool { try { - return SCHEDULED_POOLS[SCHEDULED_THREAD_RANDOMIZER++ % Config.SCHEDULED_THREAD_POOL_COUNT].schedule(new RunnableWrapper(runnable), delay, TimeUnit.MILLISECONDS); + return SCHEDULED_POOLS[SCHEDULED_THREAD_RANDOMIZER++ % Config.SCHEDULED_THREAD_POOL_COUNT].schedule(new RunnableWrapper(runnable), validate(delay), TimeUnit.MILLISECONDS); } catch (Exception e) { @@ -124,7 +126,7 @@ public class ThreadPool { try { - return SCHEDULED_POOLS[SCHEDULED_THREAD_RANDOMIZER++ % Config.SCHEDULED_THREAD_POOL_COUNT].scheduleAtFixedRate(new RunnableWrapper(runnable), initialDelay, period, TimeUnit.MILLISECONDS); + return SCHEDULED_POOLS[SCHEDULED_THREAD_RANDOMIZER++ % Config.SCHEDULED_THREAD_POOL_COUNT].scheduleAtFixedRate(new RunnableWrapper(runnable), validate(initialDelay), validate(period), TimeUnit.MILLISECONDS); } catch (Exception e) { @@ -149,6 +151,29 @@ public class ThreadPool } } + /** + * @param delay : the delay to validate. + * @return a valid value, from 0 to MAX_DELAY. + */ + private static long validate(long delay) + { + if (delay < 0) + { + final Exception e = new Exception(); + LOGGER.warning("ThreadPool found delay " + delay + "!"); + LOGGER.warning(CommonUtil.getStackTrace(e)); + return 0; + } + if (delay > MAX_DELAY) + { + final Exception e = new Exception(); + LOGGER.warning("ThreadPool found delay " + delay + "!"); + LOGGER.warning(CommonUtil.getStackTrace(e)); + return MAX_DELAY; + } + return delay; + } + public static String[] getStats() { final String[] stats = new String[(SCHEDULED_POOLS.length + INSTANT_POOLS.length) * 10]; diff --git a/L2J_Mobius_Classic_2.7_Antharas/java/org/l2jmobius/commons/threads/ThreadPool.java b/L2J_Mobius_Classic_2.7_Antharas/java/org/l2jmobius/commons/threads/ThreadPool.java index 7f90cf2e7a..07998e3848 100644 --- a/L2J_Mobius_Classic_2.7_Antharas/java/org/l2jmobius/commons/threads/ThreadPool.java +++ b/L2J_Mobius_Classic_2.7_Antharas/java/org/l2jmobius/commons/threads/ThreadPool.java @@ -24,6 +24,7 @@ import java.util.concurrent.TimeUnit; import java.util.logging.Logger; import org.l2jmobius.Config; +import org.l2jmobius.commons.util.CommonUtil; /** * This class handles thread pooling system.
@@ -40,6 +41,7 @@ public class ThreadPool private static final ScheduledThreadPoolExecutor[] SCHEDULED_POOLS = new ScheduledThreadPoolExecutor[Config.SCHEDULED_THREAD_POOL_COUNT]; private static final ThreadPoolExecutor[] INSTANT_POOLS = new ThreadPoolExecutor[Config.INSTANT_THREAD_POOL_COUNT]; + private static final long MAX_DELAY = 3155695200000L; // One hundred years. private static int SCHEDULED_THREAD_RANDOMIZER = 0; private static int INSTANT_THREAD_RANDOMIZER = 0; @@ -104,7 +106,7 @@ public class ThreadPool { try { - return SCHEDULED_POOLS[SCHEDULED_THREAD_RANDOMIZER++ % Config.SCHEDULED_THREAD_POOL_COUNT].schedule(new RunnableWrapper(runnable), delay, TimeUnit.MILLISECONDS); + return SCHEDULED_POOLS[SCHEDULED_THREAD_RANDOMIZER++ % Config.SCHEDULED_THREAD_POOL_COUNT].schedule(new RunnableWrapper(runnable), validate(delay), TimeUnit.MILLISECONDS); } catch (Exception e) { @@ -124,7 +126,7 @@ public class ThreadPool { try { - return SCHEDULED_POOLS[SCHEDULED_THREAD_RANDOMIZER++ % Config.SCHEDULED_THREAD_POOL_COUNT].scheduleAtFixedRate(new RunnableWrapper(runnable), initialDelay, period, TimeUnit.MILLISECONDS); + return SCHEDULED_POOLS[SCHEDULED_THREAD_RANDOMIZER++ % Config.SCHEDULED_THREAD_POOL_COUNT].scheduleAtFixedRate(new RunnableWrapper(runnable), validate(initialDelay), validate(period), TimeUnit.MILLISECONDS); } catch (Exception e) { @@ -149,6 +151,29 @@ public class ThreadPool } } + /** + * @param delay : the delay to validate. + * @return a valid value, from 0 to MAX_DELAY. + */ + private static long validate(long delay) + { + if (delay < 0) + { + final Exception e = new Exception(); + LOGGER.warning("ThreadPool found delay " + delay + "!"); + LOGGER.warning(CommonUtil.getStackTrace(e)); + return 0; + } + if (delay > MAX_DELAY) + { + final Exception e = new Exception(); + LOGGER.warning("ThreadPool found delay " + delay + "!"); + LOGGER.warning(CommonUtil.getStackTrace(e)); + return MAX_DELAY; + } + return delay; + } + public static String[] getStats() { final String[] stats = new String[(SCHEDULED_POOLS.length + INSTANT_POOLS.length) * 10]; diff --git a/L2J_Mobius_Classic_2.8_SevenSigns/java/org/l2jmobius/commons/threads/ThreadPool.java b/L2J_Mobius_Classic_2.8_SevenSigns/java/org/l2jmobius/commons/threads/ThreadPool.java index 7f90cf2e7a..07998e3848 100644 --- a/L2J_Mobius_Classic_2.8_SevenSigns/java/org/l2jmobius/commons/threads/ThreadPool.java +++ b/L2J_Mobius_Classic_2.8_SevenSigns/java/org/l2jmobius/commons/threads/ThreadPool.java @@ -24,6 +24,7 @@ import java.util.concurrent.TimeUnit; import java.util.logging.Logger; import org.l2jmobius.Config; +import org.l2jmobius.commons.util.CommonUtil; /** * This class handles thread pooling system.
@@ -40,6 +41,7 @@ public class ThreadPool private static final ScheduledThreadPoolExecutor[] SCHEDULED_POOLS = new ScheduledThreadPoolExecutor[Config.SCHEDULED_THREAD_POOL_COUNT]; private static final ThreadPoolExecutor[] INSTANT_POOLS = new ThreadPoolExecutor[Config.INSTANT_THREAD_POOL_COUNT]; + private static final long MAX_DELAY = 3155695200000L; // One hundred years. private static int SCHEDULED_THREAD_RANDOMIZER = 0; private static int INSTANT_THREAD_RANDOMIZER = 0; @@ -104,7 +106,7 @@ public class ThreadPool { try { - return SCHEDULED_POOLS[SCHEDULED_THREAD_RANDOMIZER++ % Config.SCHEDULED_THREAD_POOL_COUNT].schedule(new RunnableWrapper(runnable), delay, TimeUnit.MILLISECONDS); + return SCHEDULED_POOLS[SCHEDULED_THREAD_RANDOMIZER++ % Config.SCHEDULED_THREAD_POOL_COUNT].schedule(new RunnableWrapper(runnable), validate(delay), TimeUnit.MILLISECONDS); } catch (Exception e) { @@ -124,7 +126,7 @@ public class ThreadPool { try { - return SCHEDULED_POOLS[SCHEDULED_THREAD_RANDOMIZER++ % Config.SCHEDULED_THREAD_POOL_COUNT].scheduleAtFixedRate(new RunnableWrapper(runnable), initialDelay, period, TimeUnit.MILLISECONDS); + return SCHEDULED_POOLS[SCHEDULED_THREAD_RANDOMIZER++ % Config.SCHEDULED_THREAD_POOL_COUNT].scheduleAtFixedRate(new RunnableWrapper(runnable), validate(initialDelay), validate(period), TimeUnit.MILLISECONDS); } catch (Exception e) { @@ -149,6 +151,29 @@ public class ThreadPool } } + /** + * @param delay : the delay to validate. + * @return a valid value, from 0 to MAX_DELAY. + */ + private static long validate(long delay) + { + if (delay < 0) + { + final Exception e = new Exception(); + LOGGER.warning("ThreadPool found delay " + delay + "!"); + LOGGER.warning(CommonUtil.getStackTrace(e)); + return 0; + } + if (delay > MAX_DELAY) + { + final Exception e = new Exception(); + LOGGER.warning("ThreadPool found delay " + delay + "!"); + LOGGER.warning(CommonUtil.getStackTrace(e)); + return MAX_DELAY; + } + return delay; + } + public static String[] getStats() { final String[] stats = new String[(SCHEDULED_POOLS.length + INSTANT_POOLS.length) * 10]; diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/commons/threads/ThreadPool.java b/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/commons/threads/ThreadPool.java index 7f90cf2e7a..07998e3848 100644 --- a/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/commons/threads/ThreadPool.java +++ b/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/commons/threads/ThreadPool.java @@ -24,6 +24,7 @@ import java.util.concurrent.TimeUnit; import java.util.logging.Logger; import org.l2jmobius.Config; +import org.l2jmobius.commons.util.CommonUtil; /** * This class handles thread pooling system.
@@ -40,6 +41,7 @@ public class ThreadPool private static final ScheduledThreadPoolExecutor[] SCHEDULED_POOLS = new ScheduledThreadPoolExecutor[Config.SCHEDULED_THREAD_POOL_COUNT]; private static final ThreadPoolExecutor[] INSTANT_POOLS = new ThreadPoolExecutor[Config.INSTANT_THREAD_POOL_COUNT]; + private static final long MAX_DELAY = 3155695200000L; // One hundred years. private static int SCHEDULED_THREAD_RANDOMIZER = 0; private static int INSTANT_THREAD_RANDOMIZER = 0; @@ -104,7 +106,7 @@ public class ThreadPool { try { - return SCHEDULED_POOLS[SCHEDULED_THREAD_RANDOMIZER++ % Config.SCHEDULED_THREAD_POOL_COUNT].schedule(new RunnableWrapper(runnable), delay, TimeUnit.MILLISECONDS); + return SCHEDULED_POOLS[SCHEDULED_THREAD_RANDOMIZER++ % Config.SCHEDULED_THREAD_POOL_COUNT].schedule(new RunnableWrapper(runnable), validate(delay), TimeUnit.MILLISECONDS); } catch (Exception e) { @@ -124,7 +126,7 @@ public class ThreadPool { try { - return SCHEDULED_POOLS[SCHEDULED_THREAD_RANDOMIZER++ % Config.SCHEDULED_THREAD_POOL_COUNT].scheduleAtFixedRate(new RunnableWrapper(runnable), initialDelay, period, TimeUnit.MILLISECONDS); + return SCHEDULED_POOLS[SCHEDULED_THREAD_RANDOMIZER++ % Config.SCHEDULED_THREAD_POOL_COUNT].scheduleAtFixedRate(new RunnableWrapper(runnable), validate(initialDelay), validate(period), TimeUnit.MILLISECONDS); } catch (Exception e) { @@ -149,6 +151,29 @@ public class ThreadPool } } + /** + * @param delay : the delay to validate. + * @return a valid value, from 0 to MAX_DELAY. + */ + private static long validate(long delay) + { + if (delay < 0) + { + final Exception e = new Exception(); + LOGGER.warning("ThreadPool found delay " + delay + "!"); + LOGGER.warning(CommonUtil.getStackTrace(e)); + return 0; + } + if (delay > MAX_DELAY) + { + final Exception e = new Exception(); + LOGGER.warning("ThreadPool found delay " + delay + "!"); + LOGGER.warning(CommonUtil.getStackTrace(e)); + return MAX_DELAY; + } + return delay; + } + public static String[] getStats() { final String[] stats = new String[(SCHEDULED_POOLS.length + INSTANT_POOLS.length) * 10]; diff --git a/L2J_Mobius_Classic_2.9_SecretOfEmpire/java/org/l2jmobius/commons/threads/ThreadPool.java b/L2J_Mobius_Classic_2.9_SecretOfEmpire/java/org/l2jmobius/commons/threads/ThreadPool.java index 7f90cf2e7a..07998e3848 100644 --- a/L2J_Mobius_Classic_2.9_SecretOfEmpire/java/org/l2jmobius/commons/threads/ThreadPool.java +++ b/L2J_Mobius_Classic_2.9_SecretOfEmpire/java/org/l2jmobius/commons/threads/ThreadPool.java @@ -24,6 +24,7 @@ import java.util.concurrent.TimeUnit; import java.util.logging.Logger; import org.l2jmobius.Config; +import org.l2jmobius.commons.util.CommonUtil; /** * This class handles thread pooling system.
@@ -40,6 +41,7 @@ public class ThreadPool private static final ScheduledThreadPoolExecutor[] SCHEDULED_POOLS = new ScheduledThreadPoolExecutor[Config.SCHEDULED_THREAD_POOL_COUNT]; private static final ThreadPoolExecutor[] INSTANT_POOLS = new ThreadPoolExecutor[Config.INSTANT_THREAD_POOL_COUNT]; + private static final long MAX_DELAY = 3155695200000L; // One hundred years. private static int SCHEDULED_THREAD_RANDOMIZER = 0; private static int INSTANT_THREAD_RANDOMIZER = 0; @@ -104,7 +106,7 @@ public class ThreadPool { try { - return SCHEDULED_POOLS[SCHEDULED_THREAD_RANDOMIZER++ % Config.SCHEDULED_THREAD_POOL_COUNT].schedule(new RunnableWrapper(runnable), delay, TimeUnit.MILLISECONDS); + return SCHEDULED_POOLS[SCHEDULED_THREAD_RANDOMIZER++ % Config.SCHEDULED_THREAD_POOL_COUNT].schedule(new RunnableWrapper(runnable), validate(delay), TimeUnit.MILLISECONDS); } catch (Exception e) { @@ -124,7 +126,7 @@ public class ThreadPool { try { - return SCHEDULED_POOLS[SCHEDULED_THREAD_RANDOMIZER++ % Config.SCHEDULED_THREAD_POOL_COUNT].scheduleAtFixedRate(new RunnableWrapper(runnable), initialDelay, period, TimeUnit.MILLISECONDS); + return SCHEDULED_POOLS[SCHEDULED_THREAD_RANDOMIZER++ % Config.SCHEDULED_THREAD_POOL_COUNT].scheduleAtFixedRate(new RunnableWrapper(runnable), validate(initialDelay), validate(period), TimeUnit.MILLISECONDS); } catch (Exception e) { @@ -149,6 +151,29 @@ public class ThreadPool } } + /** + * @param delay : the delay to validate. + * @return a valid value, from 0 to MAX_DELAY. + */ + private static long validate(long delay) + { + if (delay < 0) + { + final Exception e = new Exception(); + LOGGER.warning("ThreadPool found delay " + delay + "!"); + LOGGER.warning(CommonUtil.getStackTrace(e)); + return 0; + } + if (delay > MAX_DELAY) + { + final Exception e = new Exception(); + LOGGER.warning("ThreadPool found delay " + delay + "!"); + LOGGER.warning(CommonUtil.getStackTrace(e)); + return MAX_DELAY; + } + return delay; + } + public static String[] getStats() { final String[] stats = new String[(SCHEDULED_POOLS.length + INSTANT_POOLS.length) * 10]; diff --git a/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/commons/threads/ThreadPool.java b/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/commons/threads/ThreadPool.java index 7f90cf2e7a..07998e3848 100644 --- a/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/commons/threads/ThreadPool.java +++ b/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/commons/threads/ThreadPool.java @@ -24,6 +24,7 @@ import java.util.concurrent.TimeUnit; import java.util.logging.Logger; import org.l2jmobius.Config; +import org.l2jmobius.commons.util.CommonUtil; /** * This class handles thread pooling system.
@@ -40,6 +41,7 @@ public class ThreadPool private static final ScheduledThreadPoolExecutor[] SCHEDULED_POOLS = new ScheduledThreadPoolExecutor[Config.SCHEDULED_THREAD_POOL_COUNT]; private static final ThreadPoolExecutor[] INSTANT_POOLS = new ThreadPoolExecutor[Config.INSTANT_THREAD_POOL_COUNT]; + private static final long MAX_DELAY = 3155695200000L; // One hundred years. private static int SCHEDULED_THREAD_RANDOMIZER = 0; private static int INSTANT_THREAD_RANDOMIZER = 0; @@ -104,7 +106,7 @@ public class ThreadPool { try { - return SCHEDULED_POOLS[SCHEDULED_THREAD_RANDOMIZER++ % Config.SCHEDULED_THREAD_POOL_COUNT].schedule(new RunnableWrapper(runnable), delay, TimeUnit.MILLISECONDS); + return SCHEDULED_POOLS[SCHEDULED_THREAD_RANDOMIZER++ % Config.SCHEDULED_THREAD_POOL_COUNT].schedule(new RunnableWrapper(runnable), validate(delay), TimeUnit.MILLISECONDS); } catch (Exception e) { @@ -124,7 +126,7 @@ public class ThreadPool { try { - return SCHEDULED_POOLS[SCHEDULED_THREAD_RANDOMIZER++ % Config.SCHEDULED_THREAD_POOL_COUNT].scheduleAtFixedRate(new RunnableWrapper(runnable), initialDelay, period, TimeUnit.MILLISECONDS); + return SCHEDULED_POOLS[SCHEDULED_THREAD_RANDOMIZER++ % Config.SCHEDULED_THREAD_POOL_COUNT].scheduleAtFixedRate(new RunnableWrapper(runnable), validate(initialDelay), validate(period), TimeUnit.MILLISECONDS); } catch (Exception e) { @@ -149,6 +151,29 @@ public class ThreadPool } } + /** + * @param delay : the delay to validate. + * @return a valid value, from 0 to MAX_DELAY. + */ + private static long validate(long delay) + { + if (delay < 0) + { + final Exception e = new Exception(); + LOGGER.warning("ThreadPool found delay " + delay + "!"); + LOGGER.warning(CommonUtil.getStackTrace(e)); + return 0; + } + if (delay > MAX_DELAY) + { + final Exception e = new Exception(); + LOGGER.warning("ThreadPool found delay " + delay + "!"); + LOGGER.warning(CommonUtil.getStackTrace(e)); + return MAX_DELAY; + } + return delay; + } + public static String[] getStats() { final String[] stats = new String[(SCHEDULED_POOLS.length + INSTANT_POOLS.length) * 10]; diff --git a/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/commons/threads/ThreadPool.java b/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/commons/threads/ThreadPool.java index 7f90cf2e7a..07998e3848 100644 --- a/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/commons/threads/ThreadPool.java +++ b/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/commons/threads/ThreadPool.java @@ -24,6 +24,7 @@ import java.util.concurrent.TimeUnit; import java.util.logging.Logger; import org.l2jmobius.Config; +import org.l2jmobius.commons.util.CommonUtil; /** * This class handles thread pooling system.
@@ -40,6 +41,7 @@ public class ThreadPool private static final ScheduledThreadPoolExecutor[] SCHEDULED_POOLS = new ScheduledThreadPoolExecutor[Config.SCHEDULED_THREAD_POOL_COUNT]; private static final ThreadPoolExecutor[] INSTANT_POOLS = new ThreadPoolExecutor[Config.INSTANT_THREAD_POOL_COUNT]; + private static final long MAX_DELAY = 3155695200000L; // One hundred years. private static int SCHEDULED_THREAD_RANDOMIZER = 0; private static int INSTANT_THREAD_RANDOMIZER = 0; @@ -104,7 +106,7 @@ public class ThreadPool { try { - return SCHEDULED_POOLS[SCHEDULED_THREAD_RANDOMIZER++ % Config.SCHEDULED_THREAD_POOL_COUNT].schedule(new RunnableWrapper(runnable), delay, TimeUnit.MILLISECONDS); + return SCHEDULED_POOLS[SCHEDULED_THREAD_RANDOMIZER++ % Config.SCHEDULED_THREAD_POOL_COUNT].schedule(new RunnableWrapper(runnable), validate(delay), TimeUnit.MILLISECONDS); } catch (Exception e) { @@ -124,7 +126,7 @@ public class ThreadPool { try { - return SCHEDULED_POOLS[SCHEDULED_THREAD_RANDOMIZER++ % Config.SCHEDULED_THREAD_POOL_COUNT].scheduleAtFixedRate(new RunnableWrapper(runnable), initialDelay, period, TimeUnit.MILLISECONDS); + return SCHEDULED_POOLS[SCHEDULED_THREAD_RANDOMIZER++ % Config.SCHEDULED_THREAD_POOL_COUNT].scheduleAtFixedRate(new RunnableWrapper(runnable), validate(initialDelay), validate(period), TimeUnit.MILLISECONDS); } catch (Exception e) { @@ -149,6 +151,29 @@ public class ThreadPool } } + /** + * @param delay : the delay to validate. + * @return a valid value, from 0 to MAX_DELAY. + */ + private static long validate(long delay) + { + if (delay < 0) + { + final Exception e = new Exception(); + LOGGER.warning("ThreadPool found delay " + delay + "!"); + LOGGER.warning(CommonUtil.getStackTrace(e)); + return 0; + } + if (delay > MAX_DELAY) + { + final Exception e = new Exception(); + LOGGER.warning("ThreadPool found delay " + delay + "!"); + LOGGER.warning(CommonUtil.getStackTrace(e)); + return MAX_DELAY; + } + return delay; + } + public static String[] getStats() { final String[] stats = new String[(SCHEDULED_POOLS.length + INSTANT_POOLS.length) * 10]; diff --git a/L2J_Mobius_Essence_4.2_DwellingOfSpirits/java/org/l2jmobius/commons/threads/ThreadPool.java b/L2J_Mobius_Essence_4.2_DwellingOfSpirits/java/org/l2jmobius/commons/threads/ThreadPool.java index 7f90cf2e7a..07998e3848 100644 --- a/L2J_Mobius_Essence_4.2_DwellingOfSpirits/java/org/l2jmobius/commons/threads/ThreadPool.java +++ b/L2J_Mobius_Essence_4.2_DwellingOfSpirits/java/org/l2jmobius/commons/threads/ThreadPool.java @@ -24,6 +24,7 @@ import java.util.concurrent.TimeUnit; import java.util.logging.Logger; import org.l2jmobius.Config; +import org.l2jmobius.commons.util.CommonUtil; /** * This class handles thread pooling system.
@@ -40,6 +41,7 @@ public class ThreadPool private static final ScheduledThreadPoolExecutor[] SCHEDULED_POOLS = new ScheduledThreadPoolExecutor[Config.SCHEDULED_THREAD_POOL_COUNT]; private static final ThreadPoolExecutor[] INSTANT_POOLS = new ThreadPoolExecutor[Config.INSTANT_THREAD_POOL_COUNT]; + private static final long MAX_DELAY = 3155695200000L; // One hundred years. private static int SCHEDULED_THREAD_RANDOMIZER = 0; private static int INSTANT_THREAD_RANDOMIZER = 0; @@ -104,7 +106,7 @@ public class ThreadPool { try { - return SCHEDULED_POOLS[SCHEDULED_THREAD_RANDOMIZER++ % Config.SCHEDULED_THREAD_POOL_COUNT].schedule(new RunnableWrapper(runnable), delay, TimeUnit.MILLISECONDS); + return SCHEDULED_POOLS[SCHEDULED_THREAD_RANDOMIZER++ % Config.SCHEDULED_THREAD_POOL_COUNT].schedule(new RunnableWrapper(runnable), validate(delay), TimeUnit.MILLISECONDS); } catch (Exception e) { @@ -124,7 +126,7 @@ public class ThreadPool { try { - return SCHEDULED_POOLS[SCHEDULED_THREAD_RANDOMIZER++ % Config.SCHEDULED_THREAD_POOL_COUNT].scheduleAtFixedRate(new RunnableWrapper(runnable), initialDelay, period, TimeUnit.MILLISECONDS); + return SCHEDULED_POOLS[SCHEDULED_THREAD_RANDOMIZER++ % Config.SCHEDULED_THREAD_POOL_COUNT].scheduleAtFixedRate(new RunnableWrapper(runnable), validate(initialDelay), validate(period), TimeUnit.MILLISECONDS); } catch (Exception e) { @@ -149,6 +151,29 @@ public class ThreadPool } } + /** + * @param delay : the delay to validate. + * @return a valid value, from 0 to MAX_DELAY. + */ + private static long validate(long delay) + { + if (delay < 0) + { + final Exception e = new Exception(); + LOGGER.warning("ThreadPool found delay " + delay + "!"); + LOGGER.warning(CommonUtil.getStackTrace(e)); + return 0; + } + if (delay > MAX_DELAY) + { + final Exception e = new Exception(); + LOGGER.warning("ThreadPool found delay " + delay + "!"); + LOGGER.warning(CommonUtil.getStackTrace(e)); + return MAX_DELAY; + } + return delay; + } + public static String[] getStats() { final String[] stats = new String[(SCHEDULED_POOLS.length + INSTANT_POOLS.length) * 10]; diff --git a/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/commons/threads/ThreadPool.java b/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/commons/threads/ThreadPool.java index 7f90cf2e7a..07998e3848 100644 --- a/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/commons/threads/ThreadPool.java +++ b/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/commons/threads/ThreadPool.java @@ -24,6 +24,7 @@ import java.util.concurrent.TimeUnit; import java.util.logging.Logger; import org.l2jmobius.Config; +import org.l2jmobius.commons.util.CommonUtil; /** * This class handles thread pooling system.
@@ -40,6 +41,7 @@ public class ThreadPool private static final ScheduledThreadPoolExecutor[] SCHEDULED_POOLS = new ScheduledThreadPoolExecutor[Config.SCHEDULED_THREAD_POOL_COUNT]; private static final ThreadPoolExecutor[] INSTANT_POOLS = new ThreadPoolExecutor[Config.INSTANT_THREAD_POOL_COUNT]; + private static final long MAX_DELAY = 3155695200000L; // One hundred years. private static int SCHEDULED_THREAD_RANDOMIZER = 0; private static int INSTANT_THREAD_RANDOMIZER = 0; @@ -104,7 +106,7 @@ public class ThreadPool { try { - return SCHEDULED_POOLS[SCHEDULED_THREAD_RANDOMIZER++ % Config.SCHEDULED_THREAD_POOL_COUNT].schedule(new RunnableWrapper(runnable), delay, TimeUnit.MILLISECONDS); + return SCHEDULED_POOLS[SCHEDULED_THREAD_RANDOMIZER++ % Config.SCHEDULED_THREAD_POOL_COUNT].schedule(new RunnableWrapper(runnable), validate(delay), TimeUnit.MILLISECONDS); } catch (Exception e) { @@ -124,7 +126,7 @@ public class ThreadPool { try { - return SCHEDULED_POOLS[SCHEDULED_THREAD_RANDOMIZER++ % Config.SCHEDULED_THREAD_POOL_COUNT].scheduleAtFixedRate(new RunnableWrapper(runnable), initialDelay, period, TimeUnit.MILLISECONDS); + return SCHEDULED_POOLS[SCHEDULED_THREAD_RANDOMIZER++ % Config.SCHEDULED_THREAD_POOL_COUNT].scheduleAtFixedRate(new RunnableWrapper(runnable), validate(initialDelay), validate(period), TimeUnit.MILLISECONDS); } catch (Exception e) { @@ -149,6 +151,29 @@ public class ThreadPool } } + /** + * @param delay : the delay to validate. + * @return a valid value, from 0 to MAX_DELAY. + */ + private static long validate(long delay) + { + if (delay < 0) + { + final Exception e = new Exception(); + LOGGER.warning("ThreadPool found delay " + delay + "!"); + LOGGER.warning(CommonUtil.getStackTrace(e)); + return 0; + } + if (delay > MAX_DELAY) + { + final Exception e = new Exception(); + LOGGER.warning("ThreadPool found delay " + delay + "!"); + LOGGER.warning(CommonUtil.getStackTrace(e)); + return MAX_DELAY; + } + return delay; + } + public static String[] getStats() { final String[] stats = new String[(SCHEDULED_POOLS.length + INSTANT_POOLS.length) * 10]; diff --git a/L2J_Mobius_Essence_6.2_Vanguard/java/org/l2jmobius/commons/threads/ThreadPool.java b/L2J_Mobius_Essence_6.2_Vanguard/java/org/l2jmobius/commons/threads/ThreadPool.java index 7f90cf2e7a..07998e3848 100644 --- a/L2J_Mobius_Essence_6.2_Vanguard/java/org/l2jmobius/commons/threads/ThreadPool.java +++ b/L2J_Mobius_Essence_6.2_Vanguard/java/org/l2jmobius/commons/threads/ThreadPool.java @@ -24,6 +24,7 @@ import java.util.concurrent.TimeUnit; import java.util.logging.Logger; import org.l2jmobius.Config; +import org.l2jmobius.commons.util.CommonUtil; /** * This class handles thread pooling system.
@@ -40,6 +41,7 @@ public class ThreadPool private static final ScheduledThreadPoolExecutor[] SCHEDULED_POOLS = new ScheduledThreadPoolExecutor[Config.SCHEDULED_THREAD_POOL_COUNT]; private static final ThreadPoolExecutor[] INSTANT_POOLS = new ThreadPoolExecutor[Config.INSTANT_THREAD_POOL_COUNT]; + private static final long MAX_DELAY = 3155695200000L; // One hundred years. private static int SCHEDULED_THREAD_RANDOMIZER = 0; private static int INSTANT_THREAD_RANDOMIZER = 0; @@ -104,7 +106,7 @@ public class ThreadPool { try { - return SCHEDULED_POOLS[SCHEDULED_THREAD_RANDOMIZER++ % Config.SCHEDULED_THREAD_POOL_COUNT].schedule(new RunnableWrapper(runnable), delay, TimeUnit.MILLISECONDS); + return SCHEDULED_POOLS[SCHEDULED_THREAD_RANDOMIZER++ % Config.SCHEDULED_THREAD_POOL_COUNT].schedule(new RunnableWrapper(runnable), validate(delay), TimeUnit.MILLISECONDS); } catch (Exception e) { @@ -124,7 +126,7 @@ public class ThreadPool { try { - return SCHEDULED_POOLS[SCHEDULED_THREAD_RANDOMIZER++ % Config.SCHEDULED_THREAD_POOL_COUNT].scheduleAtFixedRate(new RunnableWrapper(runnable), initialDelay, period, TimeUnit.MILLISECONDS); + return SCHEDULED_POOLS[SCHEDULED_THREAD_RANDOMIZER++ % Config.SCHEDULED_THREAD_POOL_COUNT].scheduleAtFixedRate(new RunnableWrapper(runnable), validate(initialDelay), validate(period), TimeUnit.MILLISECONDS); } catch (Exception e) { @@ -149,6 +151,29 @@ public class ThreadPool } } + /** + * @param delay : the delay to validate. + * @return a valid value, from 0 to MAX_DELAY. + */ + private static long validate(long delay) + { + if (delay < 0) + { + final Exception e = new Exception(); + LOGGER.warning("ThreadPool found delay " + delay + "!"); + LOGGER.warning(CommonUtil.getStackTrace(e)); + return 0; + } + if (delay > MAX_DELAY) + { + final Exception e = new Exception(); + LOGGER.warning("ThreadPool found delay " + delay + "!"); + LOGGER.warning(CommonUtil.getStackTrace(e)); + return MAX_DELAY; + } + return delay; + } + public static String[] getStats() { final String[] stats = new String[(SCHEDULED_POOLS.length + INSTANT_POOLS.length) * 10];