server log error: ConcurrentModificationException in deep copy of TriggeredAbilities
- Dominant language
- Java
- Stars
- 2.4k
- Forks
- 940
- Avg merge
- 2d 12h
- Merged PRs (30d)
- 160
Description
```
ERROR 2024-06-23 19:25:40,628 Catch unhandled error in CALL thread: null
=>[CALL main-24120] ThreadExecutorImpl$CachedThread
PoolWithException.afterExecute
java.util.ConcurrentModificationException
at java.util.ArrayList$Itr.checkForComodification(ArrayList.java:911)
at java.util.ArrayList$Itr.next(ArrayList.java:861)
at mage.util.CardUtil.deepCopyList(CardUtil.java:1879)
at mage.util.CardUtil.deepCopyObject(CardUtil.java:1831)
at mage.abilities.TriggeredAbilities.(TriggeredAbilities.java:66)
at mage.abilities.TriggeredAbilities.copy(TriggeredAbilities.java:318)
at mage.game.GameState.(GameState.java:170)
at mage.game.GameState.copy(GameState.java:290)
at mage.game.GameImpl.(GameImpl.java:208)
at mage.game.TwoPlayerDuel.(TwoPlayerDuel.java:20)
at mage.game.TwoPlayerDuel.copy(TwoPlayerDuel.java:41)
at mage.game.TwoPlayerDuel.copy(TwoPlayerDuel.java:12)
at mage.game.GameImpl.createSimulationForPlayableCalc(GameImpl.java:264)
at mage.players.PlayerImpl.getPlayable(PlayerImpl.java:4123)
at mage.players.PlayerImpl.getPlayableObjects(PlayerImpl.java:4314)
at mage.server.game.GameSessionPlayer.prepareGameView(GameSessionPlayer.java:216)
at mage.server.game.GameSessionPlayer.getGameView(GameSessionPlayer.java:200)
at mage.server.game.GameSessionWatcher.lambda$update$0(GameSessionWatcher.java:54)
at java.util.Optional.ifPresent(Optional.java:159)
at mage.server.game.GameSessionWatcher.update(GameSessionWatcher.java:54)
at mage.server.game.GameController.updateGame(GameController.java:805)
at mage.server.game.GameController.lambda$init$3aa0d15c$1(GameController.java:122)
at mage.game.events.EventDispatcher.fireEvent(EventDispatcher.java:28)
at mage.game.events.TableEventSource.fireTableEvent(TableEventSource.java:44)
at mage.game.GameImpl.fireUpdatePlayersEvent(GameImpl.java:3127)
at mage.game.GameImpl.rollbackTurns(GameImpl.java:3940)
at mage.server.game.GameController.sendPlayerAction(GameController.java:548)
at mage.server.game.GameManagerImpl.sendPlayerAction(GameManagerImpl.java:127)
at mage.server.MageServerImpl.lambda$null$39(MageServerImpl.java:828)
at java.util.Optional.ifPresent(Optional.java:159)
at mage.server.MageServerImpl.lambda$sendPlayerAction$40(MageServerImpl.java:826)
at mage.server.MageServerImpl.lambda$execute$69(MageServerImpl.java:1161)
```
Contributor guide
No contributing guide indexed for this repository
Research direction
Start by inspecting mage.util.CardUtil.deepCopyList at CardUtil.java:1879 and the TriggeredAbilities constructor and copy method at TriggeredAbilities.java:66 and :318. Trace how the list is modified during GameState copying, then verify that the reported ConcurrentModificationException no longer occurs while deep-copying TriggeredAbilities.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- java
- Domain
- backend, game-dev
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Stale
- Clarity
- Needs clarification
- Newbie friendliness
- 35/100