aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/at/hannibal2/skyhanni/utils
diff options
context:
space:
mode:
authorhannibal2 <24389977+hannibal00212@users.noreply.github.com>2023-11-30 12:50:31 +0100
committerhannibal2 <24389977+hannibal00212@users.noreply.github.com>2023-11-30 12:50:31 +0100
commitb49c4b47c2910ab6ae75b62acf9fcc455d1da501 (patch)
tree4d0289149e02bf43a1d6704d21b8283c9c74820f /src/main/java/at/hannibal2/skyhanni/utils
parent9e418deb7cb94b048d7bd6d41e85c3d439108698 (diff)
downloadskyhanni-b49c4b47c2910ab6ae75b62acf9fcc455d1da501.tar.gz
skyhanni-b49c4b47c2910ab6ae75b62acf9fcc455d1da501.tar.bz2
skyhanni-b49c4b47c2910ab6ae75b62acf9fcc455d1da501.zip
fixed ConcurrentModificationException in DelayedRun
Diffstat (limited to 'src/main/java/at/hannibal2/skyhanni/utils')
-rw-r--r--src/main/java/at/hannibal2/skyhanni/utils/DelayedRun.kt25
1 files changed, 17 insertions, 8 deletions
diff --git a/src/main/java/at/hannibal2/skyhanni/utils/DelayedRun.kt b/src/main/java/at/hannibal2/skyhanni/utils/DelayedRun.kt
index 2af59435d..f90237588 100644
--- a/src/main/java/at/hannibal2/skyhanni/utils/DelayedRun.kt
+++ b/src/main/java/at/hannibal2/skyhanni/utils/DelayedRun.kt
@@ -1,25 +1,34 @@
package at.hannibal2.skyhanni.utils
+import at.hannibal2.skyhanni.utils.LorenzUtils.editCopy
import kotlin.time.Duration
+// TODO find better sync bug fix than creating a new map for each use
object DelayedRun {
- val map = mutableMapOf<() -> Any, SimpleTimeMark>()
+ var map = mapOf<() -> Any, SimpleTimeMark>()
fun runDelayed(duration: Duration, run: () -> Unit) {
- map[run] = SimpleTimeMark.now() + duration
+ map = map.editCopy {
+ this[run] = SimpleTimeMark.now() + duration
+ }
}
fun runNextTick(run: () -> Unit) {
- map[run] = SimpleTimeMark.now()
+ map = map.editCopy {
+ this[run] = SimpleTimeMark.now()
+ }
}
fun checkRuns() {
- map.entries.removeIf { (runnable, time) ->
- val inPast = time.isInPast()
- if (inPast) {
- runnable()
+ if (map.isEmpty()) return
+ map = map.editCopy {
+ entries.removeIf { (runnable, time) ->
+ val inPast = time.isInPast()
+ if (inPast) {
+ runnable()
+ }
+ inPast
}
- inPast
}
}
}