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

BETA: Fixing resource leak that is causing time limited items to create tasks and upon delete from the world that task to not be stopped and everytime player relogin tasks are created over and over again.
* Reported by: Nos
* Reviewed by: Nos, Zoey76

Rumen Nikiforov 11 жил өмнө
parent
commit
e4009bb01e

+ 3 - 1
L2J_Server_BETA/java/com/l2jserver/gameserver/model/itemcontainer/ItemContainer.java

@@ -468,6 +468,7 @@ public abstract class ItemContainer
 				item.updateDatabase();
 				refreshWeight();
 			}
+			item.deleteMe();
 		}
 		return item;
 	}
@@ -507,7 +508,7 @@ public abstract class ItemContainer
 		{
 			return null;
 		}
-		return this.destroyItem(process, item, count, actor, reference);
+		return destroyItem(process, item, count, actor, reference);
 	}
 	
 	/**
@@ -601,6 +602,7 @@ public abstract class ItemContainer
 				if (item != null)
 				{
 					item.updateDatabase(true);
+					item.deleteMe();
 				}
 			}
 		}

+ 10 - 1
L2J_Server_BETA/java/com/l2jserver/gameserver/model/items/instance/L2ItemInstance.java

@@ -171,7 +171,7 @@ public final class L2ItemInstance extends L2Object
 	private Elementals[] _elementals = null;
 	
 	private ScheduledFuture<?> itemLootShedule = null;
-	public ScheduledFuture<?> _lifeTimeTask;
+	private ScheduledFuture<?> _lifeTimeTask;
 	
 	private final DropProtection _dropProtection = new DropProtection();
 	
@@ -2409,4 +2409,13 @@ public final class L2ItemInstance extends L2Object
 	public void setHeading(int heading)
 	{
 	}
+	
+	public void deleteMe()
+	{
+		if ((_lifeTimeTask != null) && !_lifeTimeTask.isDone())
+		{
+			_lifeTimeTask.cancel(false);
+			_lifeTimeTask = null;
+		}
+	}
 }