From 9d8299f764851a864214c74f93bca9929e489ce4 Mon Sep 17 00:00:00 2001 From: SvyatoslavScherbina Date: Tue, 2 Jun 2020 11:34:43 +0300 Subject: [PATCH] Fix sharing violation in kotlin.native.concurrent.Continuation1/2 (not related to coroutines) --- .../main/kotlin/kotlin/native/concurrent/Continuation.kt | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/runtime/src/main/kotlin/kotlin/native/concurrent/Continuation.kt b/runtime/src/main/kotlin/kotlin/native/concurrent/Continuation.kt index 0d5c3f75375..44d671ed819 100644 --- a/runtime/src/main/kotlin/kotlin/native/concurrent/Continuation.kt +++ b/runtime/src/main/kotlin/kotlin/native/concurrent/Continuation.kt @@ -43,7 +43,9 @@ public class Continuation1( } public override operator fun invoke(p1: T1) { - val args = StableRef.create(Pair(stable, p1)) + require(p1.isFrozen) + + val args = StableRef.create(Pair(stable, p1).freeze()) try { invoker(args.asCPointer()) } finally { @@ -72,7 +74,10 @@ public class Continuation2( } public override operator fun invoke(p1: T1, p2: T2) { - val args = StableRef.create(Triple(stable, p1, p2)) + require(p1.isFrozen) + require(p2.isFrozen) + + val args = StableRef.create(Triple(stable, p1, p2).freeze()) try { invoker(args.asCPointer()) } finally {