From 440122d4f9f85a2fbffa08f2016e8be980d139dd Mon Sep 17 00:00:00 2001 From: Him188 <Him188@mamoe.net> Date: Sat, 29 Oct 2022 13:14:35 +0100 Subject: [PATCH] [console] Enable atomicfu compiler --- mirai-console/backend/mirai-console/build.gradle.kts | 2 +- .../backend/mirai-console/src/util/CoroutineScopeUtils.kt | 8 +++++--- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/mirai-console/backend/mirai-console/build.gradle.kts b/mirai-console/backend/mirai-console/build.gradle.kts index 6bf4ed0e1..7f3bd418d 100644 --- a/mirai-console/backend/mirai-console/build.gradle.kts +++ b/mirai-console/backend/mirai-console/build.gradle.kts @@ -21,6 +21,7 @@ plugins { `maven-publish` id("me.him188.kotlin-jvm-blocking-bridge") id("me.him188.kotlin-dynamic-delegation") + id("kotlinx-atomicfu") } version = Versions.console @@ -45,7 +46,6 @@ dependencies { compileAndTestRuntime(project(":mirai-core-utils")) compileAndTestRuntime(`kotlin-stdlib-jdk8`) - compileAndTestRuntime(`kotlinx-atomicfu`) compileAndTestRuntime(`kotlinx-coroutines-core`) compileAndTestRuntime(`kotlinx-serialization-core`) compileAndTestRuntime(`kotlinx-serialization-json`) diff --git a/mirai-console/backend/mirai-console/src/util/CoroutineScopeUtils.kt b/mirai-console/backend/mirai-console/src/util/CoroutineScopeUtils.kt index e61108f1b..bb9983178 100644 --- a/mirai-console/backend/mirai-console/src/util/CoroutineScopeUtils.kt +++ b/mirai-console/backend/mirai-console/src/util/CoroutineScopeUtils.kt @@ -10,7 +10,6 @@ package net.mamoe.mirai.console.util import kotlinx.atomicfu.atomic -import kotlinx.atomicfu.loop import kotlinx.coroutines.* import net.mamoe.mirai.console.internal.util.runIgnoreException import net.mamoe.mirai.utils.currentTimeMillis @@ -38,7 +37,8 @@ internal class TimedTask( val job: Job = scope.launch(coroutineContext) { // `delay` always checks for cancellation - lastChangedTime.loop { last -> + while (true) { + val last = lastChangedTime.value val current = currentTimeMillis() if (last == UNCHANGED) { runIgnoreException<CancellationException> { @@ -46,7 +46,7 @@ internal class TimedTask( } ?: return@launch } else { if (current - last > intervalMillis) { - if (!lastChangedTime.compareAndSet(last, UNCHANGED)) return@loop + if (!casLastChangedToUnchanged(last)) continue action() } runIgnoreException<CancellationException> { @@ -55,6 +55,8 @@ internal class TimedTask( } } } + + private fun casLastChangedToUnchanged(last: Long) = lastChangedTime.compareAndSet(last, UNCHANGED) } internal fun CoroutineScope.launchTimedTask(