Fix tests in Cleaners (#4454)
This commit is contained in:
committed by
GitHub
parent
705f509028
commit
cb66ae8d9e
@@ -4295,6 +4295,7 @@ dynamicTest("interop_cleaners_main_thread") {
|
|||||||
cSource = "$projectDir/interop/cleaners/main_thread.cpp"
|
cSource = "$projectDir/interop/cleaners/main_thread.cpp"
|
||||||
clangTool = "clang++"
|
clangTool = "clang++"
|
||||||
goldValue = "42\n"
|
goldValue = "42\n"
|
||||||
|
flags = ['-Xopt-in=kotlin.native.internal.InternalForKotlinNative']
|
||||||
}
|
}
|
||||||
|
|
||||||
dynamicTest("interop_cleaners_second_thread") {
|
dynamicTest("interop_cleaners_second_thread") {
|
||||||
@@ -4303,6 +4304,7 @@ dynamicTest("interop_cleaners_second_thread") {
|
|||||||
cSource = "$projectDir/interop/cleaners/second_thread.cpp"
|
cSource = "$projectDir/interop/cleaners/second_thread.cpp"
|
||||||
clangTool = "clang++"
|
clangTool = "clang++"
|
||||||
goldValue = "42\n"
|
goldValue = "42\n"
|
||||||
|
flags = ['-Xopt-in=kotlin.native.internal.InternalForKotlinNative']
|
||||||
}
|
}
|
||||||
|
|
||||||
dynamicTest("interop_cleaners_leak") {
|
dynamicTest("interop_cleaners_leak") {
|
||||||
@@ -4311,6 +4313,7 @@ dynamicTest("interop_cleaners_leak") {
|
|||||||
cSource = "$projectDir/interop/cleaners/leak.cpp"
|
cSource = "$projectDir/interop/cleaners/leak.cpp"
|
||||||
clangTool = "clang++"
|
clangTool = "clang++"
|
||||||
goldValue = ""
|
goldValue = ""
|
||||||
|
flags = ['-Xopt-in=kotlin.native.internal.InternalForKotlinNative']
|
||||||
}
|
}
|
||||||
|
|
||||||
task library_mismatch(type: KonanDriverTest) {
|
task library_mismatch(type: KonanDriverTest) {
|
||||||
|
|||||||
@@ -103,66 +103,6 @@ fun testCleanerDestroyWithChild() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
|
||||||
fun testCleanerDestroyFrozenWithChild() {
|
|
||||||
val worker = Worker.start()
|
|
||||||
|
|
||||||
val called = AtomicBoolean(false);
|
|
||||||
var funBoxWeak: WeakReference<FunBox>? = null
|
|
||||||
var cleanerWeak: WeakReference<Cleaner>? = null
|
|
||||||
worker.execute(TransferMode.SAFE, {
|
|
||||||
val funBox = FunBox { called.value = true }.freeze()
|
|
||||||
funBoxWeak = WeakReference(funBox)
|
|
||||||
val cleaner = createCleaner(funBox) { it.call() }.freeze()
|
|
||||||
cleanerWeak = WeakReference(cleaner)
|
|
||||||
Pair(called, cleaner)
|
|
||||||
}) { (called, cleaner) ->
|
|
||||||
assertFalse(called.value)
|
|
||||||
}.result
|
|
||||||
|
|
||||||
GC.collect()
|
|
||||||
worker.requestTermination().result
|
|
||||||
|
|
||||||
tryWithTimeout(3) {
|
|
||||||
GC.collect() // Collect local stack (from previous iteration)
|
|
||||||
performGCOnCleanerWorker() // Collect cleaners stack
|
|
||||||
|
|
||||||
assertNull(cleanerWeak!!.value)
|
|
||||||
assertTrue(called.value)
|
|
||||||
assertNull(funBoxWeak!!.value)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
fun testCleanerDestroyFrozenInChild() {
|
|
||||||
val worker = Worker.start()
|
|
||||||
|
|
||||||
val called = AtomicBoolean(false);
|
|
||||||
var funBoxWeak: WeakReference<FunBox>? = null
|
|
||||||
var cleanerWeak: WeakReference<Cleaner>? = null
|
|
||||||
{
|
|
||||||
worker.execute(TransferMode.SAFE, {
|
|
||||||
val funBox = FunBox { called.value = true }.freeze()
|
|
||||||
funBoxWeak = WeakReference(funBox)
|
|
||||||
val cleaner = createCleaner(funBox) { it.call() }.freeze()
|
|
||||||
cleanerWeak = WeakReference(cleaner)
|
|
||||||
Pair(called, cleaner)
|
|
||||||
}) { (called, cleaner) ->
|
|
||||||
assertFalse(called.value)
|
|
||||||
}.result
|
|
||||||
}()
|
|
||||||
|
|
||||||
GC.collect()
|
|
||||||
worker.execute(TransferMode.SAFE, {}) { GC.collect() }.result
|
|
||||||
performGCOnCleanerWorker()
|
|
||||||
|
|
||||||
assertNull(cleanerWeak!!.value)
|
|
||||||
assertTrue(called.value)
|
|
||||||
assertNull(funBoxWeak!!.value)
|
|
||||||
|
|
||||||
worker.requestTermination().result
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun testCleanerDestroyInMain() {
|
fun testCleanerDestroyInMain() {
|
||||||
val worker = Worker.start()
|
val worker = Worker.start()
|
||||||
@@ -193,36 +133,6 @@ fun testCleanerDestroyInMain() {
|
|||||||
worker.requestTermination().result
|
worker.requestTermination().result
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
|
||||||
fun testCleanerDestroyFrozenInMain() {
|
|
||||||
val worker = Worker.start()
|
|
||||||
|
|
||||||
val called = AtomicBoolean(false);
|
|
||||||
var funBoxWeak: WeakReference<FunBox>? = null
|
|
||||||
var cleanerWeak: WeakReference<Cleaner>? = null
|
|
||||||
{
|
|
||||||
val result = worker.execute(TransferMode.SAFE, { called }) { called ->
|
|
||||||
val funBox = FunBox { called.value = true }.freeze()
|
|
||||||
val cleaner = createCleaner(funBox) { it.call() }.freeze()
|
|
||||||
Triple(cleaner, WeakReference(funBox), WeakReference(cleaner))
|
|
||||||
}.result
|
|
||||||
val cleaner = result.first
|
|
||||||
funBoxWeak = result.second
|
|
||||||
cleanerWeak = result.third
|
|
||||||
assertFalse(called.value)
|
|
||||||
}()
|
|
||||||
|
|
||||||
GC.collect()
|
|
||||||
worker.execute(TransferMode.SAFE, {}) { GC.collect() }.result
|
|
||||||
performGCOnCleanerWorker()
|
|
||||||
|
|
||||||
assertNull(cleanerWeak!!.value)
|
|
||||||
assertTrue(called.value)
|
|
||||||
assertNull(funBoxWeak!!.value)
|
|
||||||
|
|
||||||
worker.requestTermination().result
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun testCleanerDestroyShared() {
|
fun testCleanerDestroyShared() {
|
||||||
val worker = Worker.start()
|
val worker = Worker.start()
|
||||||
@@ -234,7 +144,7 @@ fun testCleanerDestroyShared() {
|
|||||||
{
|
{
|
||||||
val funBox = FunBox { called.value = true }.freeze()
|
val funBox = FunBox { called.value = true }.freeze()
|
||||||
funBoxWeak = WeakReference(funBox)
|
funBoxWeak = WeakReference(funBox)
|
||||||
val cleaner = createCleaner(funBox) { it.call() }.freeze()
|
val cleaner = createCleaner(funBox) { it.call() }
|
||||||
cleanerWeak = WeakReference(cleaner)
|
cleanerWeak = WeakReference(cleaner)
|
||||||
cleanerHolder.value = cleaner
|
cleanerHolder.value = cleaner
|
||||||
worker.execute(TransferMode.SAFE, { Pair(called, cleanerHolder) }) { (called, cleanerHolder) ->
|
worker.execute(TransferMode.SAFE, { Pair(called, cleanerHolder) }) { (called, cleanerHolder) ->
|
||||||
|
|||||||
Reference in New Issue
Block a user