Caught Errors in `enhanced 'for'` Loop
lonefelidae16 opened this issue ยท 0 comments
Hi๐
I got some errors at WaterfallCloudGenerators.tickParticles(WaterfallCloudGenerators.java:67)
.
java.lang.ArrayIndexOutOfBoundsException
:
crash-2022-04-27_17.51.03-client.txt
java.lang.NullPointerException
:
crash-2022-04-27_21.40.56-client.txt
I feel that the crash rate is particularly high when moving chunks around. So I tried these test codes:
public class Main {
public static final Object2IntMap<BlockPos> particlesToSpawn = new Object2IntOpenHashMap<>();
public static void main(String[] args) throws InterruptedException {
particlesToSpawn.put(new BlockPos(0, 0, 8), 3);
particlesToSpawn.put(new BlockPos(0, 0, 1), 0);
particlesToSpawn.put(new BlockPos(0, 0, 4), 0);
particlesToSpawn.put(new BlockPos(0, 0, 0), 2);
Thread updater1 = new Thread(Main::updateParticles);
Thread updater2 = new Thread(Main::updateParticles);
updater1.start();
updater2.start();
updater1.join();
updater2.join();
}
public static void updateParticles() {
for (BlockPos pos : particlesToSpawn.keySet()) {
if (pos != null) {
if (particlesToSpawn.put(pos, particlesToSpawn.getInt(pos) - 1) <= 0) {
particlesToSpawn.removeInt(pos);
}
System.out.printf("%s, particlesToSpawn.size() == %d%n", pos, particlesToSpawn.size());
}
}
}
}
... and I got java.lang.NullPointerException
.
Perhaps this crash seems to be caused by deletion in the enhanced 'for'
loop.
By enclosing this with synchronized
and replacing ObjectSet<Object2IntMap.Entry<K>>#removeIf(Predicate)
, I have not had any problems so far.
Thanks for awesome mod!