magefree / magefree/mage

server log error: ConcurrentModificationException in deep copy of TriggeredAbilities

Open
#12,526 0 comments 0 reactions 0 assignees View on GitHub
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

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.