From a70ac0160d0406b67ad2b4e7247798bec1d3b23a Mon Sep 17 00:00:00 2001 From: Roman Elizarov Date: Thu, 15 Dec 2016 12:38:49 +0300 Subject: [PATCH] fixed runWithCurrentContinuation --- .../src/kotlin/coroutines/ContinuationCapture.kt | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/core/runtime.jvm/src/kotlin/coroutines/ContinuationCapture.kt b/core/runtime.jvm/src/kotlin/coroutines/ContinuationCapture.kt index 32f67367a9d..0824a1e8084 100644 --- a/core/runtime.jvm/src/kotlin/coroutines/ContinuationCapture.kt +++ b/core/runtime.jvm/src/kotlin/coroutines/ContinuationCapture.kt @@ -61,15 +61,19 @@ private val UNDECIDED: Any? = Any() private val RESUMED: Any? = Any() private class Fail(val exception: Throwable) -@Suppress("UNCHECKED_CAST") -private val RESULT_UPDATER = AtomicReferenceFieldUpdater.newUpdater, Any?>( - SafeContinuation::class.java, Any::class.java as Class, "result") @PublishedApi internal class SafeContinuation @PublishedApi internal constructor(private val delegate: Continuation) : Continuation { @Volatile private var result: Any? = UNDECIDED + companion object { + @Suppress("UNCHECKED_CAST") + @JvmStatic + private val RESULT_UPDATER = AtomicReferenceFieldUpdater.newUpdater, Any?>( + SafeContinuation::class.java, Any::class.java as Class, "result") + } + private fun cas(expect: Any?, update: Any?): Boolean = RESULT_UPDATER.compareAndSet(this, expect, update)