magefree / magefree/mage

Concurrent modification in PlayerImpl copy constructor addAll(inRange) on rollback

Open
#13,154 0 comments 0 reactions 0 assignees View on GitHub
bug
Dominant language
Java
Stars
2.4k
Forks
940
Avg merge
2d 12h
Merged PRs (30d)
160

Description

Found in a server log today. Two player game.

```java

ERROR 2024-12-17 03:51:56,983 Catch unhandled error in CALL thread: null =>[CALL - 51] ThreadExecutorImpl$CachedThreadPoolWithException.afterExecute
java.util.ConcurrentModificationException
at java.util.HashMap$HashIterator.nextNode(HashMap.java:1469)
at java.util.HashMap$KeyIterator.next(HashMap.java:1493)
at java.util.AbstractCollection.addAll(AbstractCollection.java:343)
at mage.players.PlayerImpl.(PlayerImpl.java:260)
at mage.player.human.HumanPlayer.(HumanPlayer.java:146)
at mage.player.human.HumanPlayer.copy(HumanPlayer.java:2779)
at mage.player.human.HumanPlayer.copy(HumanPlayer.java:66)
at mage.players.Players.(Players.java:19)
at mage.players.Players.copy(Players.java:34)
at mage.game.GameState.(GameState.java:140)
at mage.game.GameState.copy(GameState.java:289)
at mage.game.GameImpl.(GameImpl.java:209)
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.server.game.GameSessionPlayer.prepareGameView(GameSessionPlayer.java:214)
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:823)
at mage.server.game.GameController.lambda$init$3aa0d15c$1(GameController.java:123)
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:3170)
at mage.game.GameImpl.rollbackTurns(GameImpl.java:3977)
at mage.server.game.GameController.sendPlayerAction(GameController.java:566)
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)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:750)

```

Contributor guide

No contributing guide indexed for this repository

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.