Restore runtimeState value in deinitRuntime (#4587)

This commit is contained in:
Alexander Shabalin
2020-12-10 09:52:31 +03:00
committed by Stanislav Erokhin
parent 639029f47e
commit c582612bd7
6 changed files with 76 additions and 3 deletions
@@ -3813,6 +3813,10 @@ if (PlatformInfo.isAppleTarget(project)) {
createInterop("objcKt43517") {
it.defFile 'framework/kt43517/kt43517.def'
}
createInterop("objc_kt42172") {
it.defFile 'interop/objc/kt42172/objclib.def'
it.headers "$projectDir/interop/objc/kt42172/objclib.h"
}
}
createInterop("withSpaces") {
@@ -4281,6 +4285,25 @@ if (PlatformInfo.isAppleTarget(project)) {
it.contains("isObjectAliveShouldCrash") // And should contain stack trace.
}
}
interopTest("interop_objc_kt42172") {
source = "interop/objc/kt42172/main.kt"
interop = "objc_kt42172"
flags = ['-Xopt-in=kotlin.native.internal.InternalForKotlinNative']
goldValue = 'Executed finalizer\n'
doBeforeBuild {
mkdir(buildDir)
execKonanClang(project.target) {
args "$projectDir/interop/objc/kt42172/objclib.m"
args "-lobjc", '-fobjc-arc'
args '-fPIC', '-shared', '-o', "$buildDir/libobjc_kt42172.dylib"
}
if (project.target instanceof KonanTarget.IOS_X64) {
UtilsKt.codesign(project, "$buildDir/libobjc_kt42172.dylib")
}
}
}
}
standaloneTest("jsinterop_math") {
@@ -0,0 +1,18 @@
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)
}
@@ -0,0 +1,3 @@
language = Objective-C
headerFilter = **/objclib.h
linkerOpts = -lobjc_kt42172
@@ -0,0 +1,9 @@
#import <objc/NSObject.h>
typedef void (*Finalizer)(void*);
@interface WithFinalizer : NSObject
- (void)setFinalizer:(Finalizer)finalizer arg:(void*)arg;
@end
@@ -0,0 +1,19 @@
#include "objclib.h"
@implementation WithFinalizer {
Finalizer finalizer_;
void* arg_;
}
- (void)dealloc {
if (finalizer_) {
finalizer_(arg_);
}
}
- (void)setFinalizer:(Finalizer)finalizer arg:(void*)arg {
finalizer_ = finalizer;
arg_ = arg;
}
@end