OLEGSHA / Progressia

A GPL sandbox survival game
GNU General Public License v3.0
10 stars 4 forks source link

ConcurrentModificationException in entity ticking when entering world #22

Open OLEGSHA opened 2 years ago

OLEGSHA commented 2 years ago

Description

A random crash when entering a world. Probably related to entity handling based on stacktrace.

Steps to reproduce

  1. Load a world
  2. With extremely low chance, a crash will occur almost immediately

Additional context and information

Crash report:

Provided description: 
Could not run TickEntitiesTask task ru.windcorp.progressia.server.world.tasks.TickEntitiesTask@6c67ccbd
--------------------------------------------------------------------------------
Reported at:
    at ru.windcorp.progressia.common.util.crash.CrashReports.report(CrashReports.java:98)
    at ru.windcorp.progressia.server.world.ticking.Ticker.runTasks(Ticker.java:169)
    at ru.windcorp.progressia.server.world.ticking.Ticker.work(Ticker.java:150)
    at ru.windcorp.progressia.server.world.ticking.Ticker.run(Ticker.java:109)
    at java.base/java.lang.Thread.run(Thread.java:829)

Reported Throwable:
java.util.ConcurrentModificationException
    at gnu.trove.impl.hash.THashPrimitiveIterator.nextIndex(THashPrimitiveIterator.java:83)
    at gnu.trove.impl.hash.THashPrimitiveIterator.hasNext(THashPrimitiveIterator.java:102)
    at java.base/java.lang.Iterable.forEach(Iterable.java:74)
    at java.base/java.util.Collections$UnmodifiableCollection.forEach(Collections.java:1085)
    at ru.windcorp.progressia.common.world.generic.WorldGenericRO.forEachEntity(WorldGenericRO.java:161)
    at ru.windcorp.progressia.server.world.tasks.TickEntitiesTask.evaluate(TickEntitiesTask.java:30)
    at ru.windcorp.progressia.server.world.ticking.Evaluation.run(Evaluation.java:46)
    at ru.windcorp.progressia.server.world.ticking.Ticker.runTasks(Ticker.java:167)
    at ru.windcorp.progressia.server.world.ticking.Ticker.work(Ticker.java:150)
    at ru.windcorp.progressia.server.world.ticking.Ticker.run(Ticker.java:109)
    at java.base/java.lang.Thread.run(Thread.java:829)