API for object passing between platform threads. (#1270)
This commit is contained in:
@@ -594,6 +594,12 @@ task worker7(type: RunKonanTest) {
|
||||
source = "runtime/workers/worker7.kt"
|
||||
}
|
||||
|
||||
task worker8(type: RunKonanTest) {
|
||||
disabled = (project.testTarget == 'wasm32') // Workers need pthreads.
|
||||
goldValue = "SharedData(string=Hello, int=10, member=SharedDataMember(double=0.1))\nGot kotlin.Unit\nOK\n"
|
||||
source = "runtime/workers/worker8.kt"
|
||||
}
|
||||
|
||||
task superFunCall(type: RunKonanTest) {
|
||||
goldValue = "<fun:C><fun:C1>\n<fun:C><fun:C3>\n"
|
||||
source = "codegen/basics/superFunCall.kt"
|
||||
|
||||
@@ -0,0 +1,27 @@
|
||||
package runtime.workers.worker8
|
||||
|
||||
import kotlin.test.*
|
||||
|
||||
import konan.worker.*
|
||||
|
||||
data class SharedDataMember(val double: Double)
|
||||
|
||||
data class SharedData(val string: String, val int: Int, val member: SharedDataMember)
|
||||
|
||||
@Test fun runTest() {
|
||||
val worker = startWorker()
|
||||
// Here we do rather strange thing. To test object detach API we detach object graph,
|
||||
// pass C pointer as a value to worker, where we manually reattached passed value.
|
||||
val future = worker.schedule(TransferMode.CHECKED, {
|
||||
detachObjectGraph { SharedData("Hello", 10, SharedDataMember(0.1)) }
|
||||
} ) {
|
||||
inputC ->
|
||||
val input = attachObjectGraph<SharedData>(inputC)
|
||||
println(input)
|
||||
}
|
||||
future.consume {
|
||||
result -> println("Got $result")
|
||||
}
|
||||
worker.requestTermination().consume { _ -> }
|
||||
println("OK")
|
||||
}
|
||||
Reference in New Issue
Block a user