nativeTest.ConcurrentTestUtilities.kt Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of kotlinx-coroutines-core
Show all versions of kotlinx-coroutines-core
Coroutines support libraries for Kotlin
/*
* Copyright 2016-2021 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license.
*/
package kotlinx.coroutines.exceptions
import kotlinx.atomicfu.*
import kotlinx.coroutines.internal.*
import platform.posix.*
import kotlin.native.concurrent.*
import kotlin.random.*
actual fun randomWait() {
val n = Random.nextInt(1000)
if (n < 500) return // no wait 50% of time
repeat(n) {
BlackHole.sink *= 3
}
// use the BlackHole value somehow, so even if the compiler gets smarter, it won't remove the object
val sinkValue = if (BlackHole.sink > 16) 1 else 0
if (n + sinkValue > 900) sched_yield()
}
@ThreadLocal
private object BlackHole {
var sink = 1
}
internal actual typealias SuppressSupportingThrowable = SuppressSupportingThrowableImpl
actual val Throwable.suppressed: Array
get() = (this as? SuppressSupportingThrowableImpl)?.suppressed ?: emptyArray()
@Suppress("EXTENSION_SHADOWED_BY_MEMBER")
actual fun Throwable.printStackTrace() = printStackTrace()
actual fun currentThreadName(): String = Worker.current.name