Files
kotlin-fork/kotlin-native/backend.native/tests/interop/objc/kt42172/main.kt
T
Abduqodiri Qurbonzoda 209c916a7e OptIn ExperimentalNativeApi
2023-06-30 15:27:09 +00:00

27 lines
996 B
Kotlin

@file:OptIn(kotlin.experimental.ExperimentalNativeApi::class, kotlin.native.runtime.NativeRuntimeApi::class, ObsoleteWorkersApi::class)
import objclib.*
import kotlin.native.concurrent.*
import kotlinx.cinterop.*
fun main() {
val worker = Worker.start()
worker.execute(TransferMode.SAFE, {}) {
val withFinalizer = WithFinalizer()
val finalizer: Finalizer = staticCFunction { ptr: COpaquePointer? ->
ptr?.asStableRef<Any>()?.dispose()
println("Executed finalizer")
}
val arg = StableRef.create(Any()).asCPointer()
withFinalizer.setFinalizer(finalizer, arg)
}.result
worker.requestTermination().result
waitWorkerTermination(worker)
if (Platform.memoryModel == MemoryModel.EXPERIMENTAL) {
// Experimental MM by default doesn't run GC neither on worker termination nor on program exit.
// Enforce GC on program exit:
kotlin.native.runtime.Debugging.forceCheckedShutdown = true
}
}