Fix tests in Cleaners (#4454)

This commit is contained in:
Alexander Shabalin
2020-10-20 12:13:16 +03:00
committed by GitHub
parent 705f509028
commit cb66ae8d9e
2 changed files with 4 additions and 91 deletions
+3
View File
@@ -4295,6 +4295,7 @@ dynamicTest("interop_cleaners_main_thread") {
cSource = "$projectDir/interop/cleaners/main_thread.cpp"
clangTool = "clang++"
goldValue = "42\n"
flags = ['-Xopt-in=kotlin.native.internal.InternalForKotlinNative']
}
dynamicTest("interop_cleaners_second_thread") {
@@ -4303,6 +4304,7 @@ dynamicTest("interop_cleaners_second_thread") {
cSource = "$projectDir/interop/cleaners/second_thread.cpp"
clangTool = "clang++"
goldValue = "42\n"
flags = ['-Xopt-in=kotlin.native.internal.InternalForKotlinNative']
}
dynamicTest("interop_cleaners_leak") {
@@ -4311,6 +4313,7 @@ dynamicTest("interop_cleaners_leak") {
cSource = "$projectDir/interop/cleaners/leak.cpp"
clangTool = "clang++"
goldValue = ""
flags = ['-Xopt-in=kotlin.native.internal.InternalForKotlinNative']
}
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
fun testCleanerDestroyInMain() {
val worker = Worker.start()
@@ -193,36 +133,6 @@ fun testCleanerDestroyInMain() {
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
fun testCleanerDestroyShared() {
val worker = Worker.start()
@@ -234,7 +144,7 @@ fun testCleanerDestroyShared() {
{
val funBox = FunBox { called.value = true }.freeze()
funBoxWeak = WeakReference(funBox)
val cleaner = createCleaner(funBox) { it.call() }.freeze()
val cleaner = createCleaner(funBox) { it.call() }
cleanerWeak = WeakReference(cleaner)
cleanerHolder.value = cleaner
worker.execute(TransferMode.SAFE, { Pair(called, cleanerHolder) }) { (called, cleanerHolder) ->