From 067aa63de3eb5ba9bd15485abe6b8e8878c42f67 Mon Sep 17 00:00:00 2001 From: Moritz Zwerger Date: Mon, 22 Jan 2024 14:06:09 +0100 Subject: [PATCH] mod loader: fix rare concurrent modification exception when mod loading fails --- .../minosoft/modding/loader/phase/LoadingPhase.kt | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/main/java/de/bixilon/minosoft/modding/loader/phase/LoadingPhase.kt b/src/main/java/de/bixilon/minosoft/modding/loader/phase/LoadingPhase.kt index 91470d2379..31c4715288 100644 --- a/src/main/java/de/bixilon/minosoft/modding/loader/phase/LoadingPhase.kt +++ b/src/main/java/de/bixilon/minosoft/modding/loader/phase/LoadingPhase.kt @@ -1,6 +1,6 @@ /* * Minosoft - * Copyright (C) 2020-2023 Moritz Zwerger + * Copyright (C) 2020-2024 Moritz Zwerger * * This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. * @@ -13,6 +13,7 @@ package de.bixilon.minosoft.modding.loader.phase +import de.bixilon.kutil.collections.CollectionUtil.toSynchronizedList import de.bixilon.kutil.concurrent.worker.unconditional.UnconditionalWorker import de.bixilon.kutil.latch.AbstractLatch import de.bixilon.kutil.latch.AbstractLatch.Companion.child @@ -110,7 +111,7 @@ class LoadingPhase(val name: String) { worker.work(inner) state = PhaseStates.VALIDATING - worker = UnconditionalWorker() + worker = UnconditionalWorker(autoWork = false) for (mod in list) { worker += { try { @@ -125,9 +126,9 @@ class LoadingPhase(val name: String) { } worker.work(inner) - val sorted = list.sorted().toMutableList() + val sorted = list.sorted().toSynchronizedList() state = PhaseStates.CONSTRUCTING - worker = UnconditionalWorker() + worker = UnconditionalWorker(autoWork = false) for (mod in sorted) { worker += { try { @@ -144,7 +145,7 @@ class LoadingPhase(val name: String) { worker.work(inner) state = PhaseStates.POST_INIT - worker = UnconditionalWorker() + worker = UnconditionalWorker(autoWork = false) for (mod in sorted) { worker += { try {