2
0
Эх сурвалжийг харах

Experimental: remove effect task from thread pool on stopEffectTask() for faster garbage collection.

_DS_ 15 жил өмнө
parent
commit
28003ea1b1

+ 5 - 0
L2_GameServer/java/com/l2jserver/gameserver/ThreadPoolManager.java

@@ -141,6 +141,11 @@ public class ThreadPoolManager
 		}
 	}
 	
+	public boolean removeEffect(Runnable r)
+	{
+		return _effectsScheduledThreadPool.remove(r);
+	}
+	
 	public ScheduledFuture<?> scheduleGeneral(Runnable r, long delay)
 	{
 		try

+ 6 - 2
L2_GameServer/java/com/l2jserver/gameserver/model/L2Effect.java

@@ -420,8 +420,12 @@ public abstract class L2Effect
 	{
 		if (_currentFuture != null)
 		{
-			// Cancel the task
-			_currentFuture.cancel(false);
+			synchronized (_currentFuture)
+			{
+				// Cancel the task
+				_currentFuture.cancel(false);
+				ThreadPoolManager.getInstance().removeEffect(_currentTask);
+			}
 			_currentFuture = null;
 			_currentTask = null;