Explorar o código

Minor fix for event listener collection

Reported by: siphonex
Zoey76 %!s(int64=10) %!d(string=hai) anos
pai
achega
39ce5a4262

+ 4 - 12
L2J_Server/java/com/l2jserver/gameserver/model/actor/instance/L2PcInstance.java

@@ -30,14 +30,15 @@ import java.util.Collection;
 import java.util.Collections;
 import java.util.HashMap;
 import java.util.HashSet;
-import java.util.Iterator;
 import java.util.LinkedHashMap;
 import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
 import java.util.Map.Entry;
+import java.util.Queue;
 import java.util.Set;
 import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentLinkedQueue;
 import java.util.concurrent.ConcurrentSkipListMap;
 import java.util.concurrent.CopyOnWriteArrayList;
 import java.util.concurrent.Future;
@@ -388,7 +389,7 @@ public final class L2PcInstance extends L2Playable
 	
 	public static final int REQUEST_TIMEOUT = 15;
 	
-	private final List<IEventListener> _eventListeners = new CopyOnWriteArrayList<>();
+	private final Queue<IEventListener> _eventListeners = new ConcurrentLinkedQueue<>();
 	
 	private L2GameClient _client;
 	
@@ -14186,16 +14187,7 @@ public final class L2PcInstance extends L2Playable
 	
 	public void removeEventListener(Class<? extends IEventListener> clazz)
 	{
-		final Iterator<IEventListener> it = _eventListeners.iterator();
-		IEventListener event;
-		while (it.hasNext())
-		{
-			event = it.next();
-			if (event.getClass() == clazz)
-			{
-				it.remove();
-			}
-		}
+		_eventListeners.removeIf(e -> e.getClass() == clazz);
 	}
 	
 	public Collection<IEventListener> getEventListeners()