[K/N] Move kotlin.native.internal.Debugging into kotlin.native.runtime
As a part of efforts to stabilize Native stdlib #KT-55765.
This commit is contained in:
@@ -2749,6 +2749,7 @@ standaloneTest("custom_hook") {
|
|||||||
}
|
}
|
||||||
expectedExitStatusChecker = { it != 0 }
|
expectedExitStatusChecker = { it != 0 }
|
||||||
source = "runtime/exceptions/custom_hook.kt"
|
source = "runtime/exceptions/custom_hook.kt"
|
||||||
|
flags = ['-opt-in=kotlin.native.internal.InternalForKotlinNative']
|
||||||
}
|
}
|
||||||
|
|
||||||
standaloneTest("custom_hook_memory_leak") {
|
standaloneTest("custom_hook_memory_leak") {
|
||||||
@@ -4709,6 +4710,7 @@ interopTest("interop_threadStates") {
|
|||||||
disabled = (project.testTarget == 'wasm32') || // No interop for wasm yet.
|
disabled = (project.testTarget == 'wasm32') || // No interop for wasm yet.
|
||||||
!isExperimentalMM // No thread state switching in the legacy MM.
|
!isExperimentalMM // No thread state switching in the legacy MM.
|
||||||
source = "interop/threadStates/threadStates.kt"
|
source = "interop/threadStates/threadStates.kt"
|
||||||
|
flags = ['-opt-in=kotlin.native.internal.InternalForKotlinNative']
|
||||||
interop = "threadStates"
|
interop = "threadStates"
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -4717,6 +4719,7 @@ interopTest("interop_threadStates_callbacksWithExceptions") {
|
|||||||
!isExperimentalMM // No thread state switching in the legacy MM.
|
!isExperimentalMM // No thread state switching in the legacy MM.
|
||||||
source = "interop/threadStates/callbacksWithExceptions.kt"
|
source = "interop/threadStates/callbacksWithExceptions.kt"
|
||||||
interop = "threadStates"
|
interop = "threadStates"
|
||||||
|
flags = ['-opt-in=kotlin.native.internal.InternalForKotlinNative']
|
||||||
}
|
}
|
||||||
|
|
||||||
interopTest("interop_threadStates_unhandledException") {
|
interopTest("interop_threadStates_unhandledException") {
|
||||||
@@ -4726,6 +4729,7 @@ interopTest("interop_threadStates_unhandledException") {
|
|||||||
interop = "threadStates"
|
interop = "threadStates"
|
||||||
outputChecker = { it.contains("Error. Runnable state: true") }
|
outputChecker = { it.contains("Error. Runnable state: true") }
|
||||||
expectedExitStatusChecker = { it != 0 }
|
expectedExitStatusChecker = { it != 0 }
|
||||||
|
flags = ['-opt-in=kotlin.native.internal.InternalForKotlinNative']
|
||||||
}
|
}
|
||||||
|
|
||||||
interopTest("interop_threadStates_unhandledExceptionInForeignThread") {
|
interopTest("interop_threadStates_unhandledExceptionInForeignThread") {
|
||||||
@@ -4735,6 +4739,7 @@ interopTest("interop_threadStates_unhandledExceptionInForeignThread") {
|
|||||||
interop = "threadStates"
|
interop = "threadStates"
|
||||||
outputChecker = { it.contains("Error. Runnable state: true") }
|
outputChecker = { it.contains("Error. Runnable state: true") }
|
||||||
expectedExitStatusChecker = { it != 0 }
|
expectedExitStatusChecker = { it != 0 }
|
||||||
|
flags = ['-opt-in=kotlin.native.internal.InternalForKotlinNative']
|
||||||
}
|
}
|
||||||
|
|
||||||
interopTest("interop_withSpaces") {
|
interopTest("interop_withSpaces") {
|
||||||
@@ -5408,6 +5413,7 @@ dynamicTest("produce_dynamic_unhandledException") {
|
|||||||
clangTool = "clang++"
|
clangTool = "clang++"
|
||||||
expectedExitStatusChecker = { it != 0 }
|
expectedExitStatusChecker = { it != 0 }
|
||||||
outputChecker = { str -> str.startsWith("Kotlin hook: Exception. Runnable state: true") }
|
outputChecker = { str -> str.startsWith("Kotlin hook: Exception. Runnable state: true") }
|
||||||
|
flags = ['-opt-in=kotlin.native.internal.InternalForKotlinNative']
|
||||||
}
|
}
|
||||||
|
|
||||||
dynamicTest("interop_concurrentRuntime") {
|
dynamicTest("interop_concurrentRuntime") {
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ fun main() {
|
|||||||
|
|
||||||
// TODO: the test used to work with forceCheckedShutdown,
|
// TODO: the test used to work with forceCheckedShutdown,
|
||||||
// but it is broken now. Revisit after it is fixed.
|
// but it is broken now. Revisit after it is fixed.
|
||||||
// kotlin.native.internal.Debugging.forceCheckedShutdown = true
|
// kotlin.native.runtime.Debugging.forceCheckedShutdown = true
|
||||||
Platform.isCleanersLeakCheckerActive = true
|
Platform.isCleanersLeakCheckerActive = true
|
||||||
|
|
||||||
val f = Foo()
|
val f = Foo()
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
|
@file:OptIn(kotlin.native.runtime.NativeRuntimeApi::class)
|
||||||
|
|
||||||
import leakMemory.*
|
import leakMemory.*
|
||||||
import kotlin.native.concurrent.*
|
import kotlin.native.concurrent.*
|
||||||
import kotlin.native.Platform
|
import kotlin.native.Platform
|
||||||
@@ -16,7 +18,7 @@ fun ensureInititalized() {
|
|||||||
|
|
||||||
fun main() {
|
fun main() {
|
||||||
Platform.isMemoryLeakCheckerActive = true
|
Platform.isMemoryLeakCheckerActive = true
|
||||||
kotlin.native.internal.Debugging.forceCheckedShutdown = true
|
kotlin.native.runtime.Debugging.forceCheckedShutdown = true
|
||||||
assertTrue(global.value == 0)
|
assertTrue(global.value == 0)
|
||||||
// Created a thread, made sure Kotlin is initialized there.
|
// Created a thread, made sure Kotlin is initialized there.
|
||||||
test_RunInNewThread(staticCFunction(::ensureInititalized))
|
test_RunInNewThread(staticCFunction(::ensureInititalized))
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
|
@file:OptIn(kotlin.native.runtime.NativeRuntimeApi::class)
|
||||||
|
|
||||||
import leakMemory.*
|
import leakMemory.*
|
||||||
import kotlin.native.concurrent.*
|
import kotlin.native.concurrent.*
|
||||||
import kotlin.native.Platform
|
import kotlin.native.Platform
|
||||||
@@ -16,7 +18,7 @@ fun ensureInititalized() {
|
|||||||
|
|
||||||
fun main() {
|
fun main() {
|
||||||
Platform.isMemoryLeakCheckerActive = true
|
Platform.isMemoryLeakCheckerActive = true
|
||||||
kotlin.native.internal.Debugging.forceCheckedShutdown = false
|
kotlin.native.runtime.Debugging.forceCheckedShutdown = false
|
||||||
assertTrue(global.value == 0)
|
assertTrue(global.value == 0)
|
||||||
// Created a thread, made sure Kotlin is initialized there.
|
// Created a thread, made sure Kotlin is initialized there.
|
||||||
test_RunInNewThread(staticCFunction(::ensureInititalized))
|
test_RunInNewThread(staticCFunction(::ensureInititalized))
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
|
@file:OptIn(kotlin.native.runtime.NativeRuntimeApi::class)
|
||||||
|
|
||||||
import objclib.*
|
import objclib.*
|
||||||
import kotlin.native.concurrent.*
|
import kotlin.native.concurrent.*
|
||||||
import kotlinx.cinterop.*
|
import kotlinx.cinterop.*
|
||||||
@@ -19,6 +21,6 @@ fun main() {
|
|||||||
if (Platform.memoryModel == MemoryModel.EXPERIMENTAL) {
|
if (Platform.memoryModel == MemoryModel.EXPERIMENTAL) {
|
||||||
// Experimental MM by default doesn't run GC neither on worker termination nor on program exit.
|
// Experimental MM by default doesn't run GC neither on worker termination nor on program exit.
|
||||||
// Enforce GC on program exit:
|
// Enforce GC on program exit:
|
||||||
kotlin.native.internal.Debugging.forceCheckedShutdown = true
|
kotlin.native.runtime.Debugging.forceCheckedShutdown = true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ import kotlin.test.*
|
|||||||
|
|
||||||
fun main(args: Array<String>) {
|
fun main(args: Array<String>) {
|
||||||
// Test relies on full deinitialization at shutdown.
|
// Test relies on full deinitialization at shutdown.
|
||||||
kotlin.native.internal.Debugging.forceCheckedShutdown = true
|
kotlin.native.runtime.Debugging.forceCheckedShutdown = true
|
||||||
autoreleasepool {
|
autoreleasepool {
|
||||||
run()
|
run()
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ import kotlin.test.*
|
|||||||
|
|
||||||
fun main(args: Array<String>) {
|
fun main(args: Array<String>) {
|
||||||
// Test relies on full deinitialization at shutdown.
|
// Test relies on full deinitialization at shutdown.
|
||||||
kotlin.native.internal.Debugging.forceCheckedShutdown = true
|
kotlin.native.runtime.Debugging.forceCheckedShutdown = true
|
||||||
autoreleasepool {
|
autoreleasepool {
|
||||||
run()
|
run()
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,7 +3,9 @@
|
|||||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import kotlin.native.internal.Debugging
|
@file:OptIn(kotlin.native.runtime.NativeRuntimeApi::class)
|
||||||
|
|
||||||
|
import kotlin.native.runtime.Debugging
|
||||||
import kotlin.test.*
|
import kotlin.test.*
|
||||||
import kotlinx.cinterop.staticCFunction
|
import kotlinx.cinterop.staticCFunction
|
||||||
import threadStates.*
|
import threadStates.*
|
||||||
|
|||||||
@@ -3,7 +3,9 @@
|
|||||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import kotlin.native.internal.Debugging
|
@file:OptIn(kotlin.native.runtime.NativeRuntimeApi::class)
|
||||||
|
|
||||||
|
import kotlin.native.runtime.Debugging
|
||||||
import kotlin.test.*
|
import kotlin.test.*
|
||||||
import kotlinx.cinterop.*
|
import kotlinx.cinterop.*
|
||||||
import threadStates.*
|
import threadStates.*
|
||||||
|
|||||||
@@ -2,10 +2,10 @@
|
|||||||
* Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
* Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||||
*/
|
*/
|
||||||
@file:OptIn(FreezingIsDeprecated::class, ExperimentalStdlibApi::class)
|
@file:OptIn(FreezingIsDeprecated::class, ExperimentalStdlibApi::class, kotlin.native.runtime.NativeRuntimeApi::class)
|
||||||
|
|
||||||
import kotlin.native.concurrent.*
|
import kotlin.native.concurrent.*
|
||||||
import kotlin.native.internal.Debugging
|
import kotlin.native.runtime.Debugging
|
||||||
import kotlinx.cinterop.staticCFunction
|
import kotlinx.cinterop.staticCFunction
|
||||||
import threadStates.*
|
import threadStates.*
|
||||||
|
|
||||||
|
|||||||
+2
-2
@@ -2,10 +2,10 @@
|
|||||||
* Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
* Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||||
*/
|
*/
|
||||||
@file:OptIn(FreezingIsDeprecated::class, ExperimentalStdlibApi::class)
|
@file:OptIn(FreezingIsDeprecated::class, ExperimentalStdlibApi::class, kotlin.native.runtime.NativeRuntimeApi::class)
|
||||||
|
|
||||||
import kotlin.native.concurrent.*
|
import kotlin.native.concurrent.*
|
||||||
import kotlin.native.internal.Debugging
|
import kotlin.native.runtime.Debugging
|
||||||
import kotlinx.cinterop.staticCFunction
|
import kotlinx.cinterop.staticCFunction
|
||||||
import threadStates.*
|
import threadStates.*
|
||||||
|
|
||||||
|
|||||||
@@ -2,10 +2,11 @@
|
|||||||
* Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
* Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||||
*/
|
*/
|
||||||
@file:OptIn(FreezingIsDeprecated::class, ExperimentalStdlibApi::class)
|
@file:OptIn(FreezingIsDeprecated::class, ExperimentalStdlibApi::class, kotlin.native.runtime.NativeRuntimeApi::class)
|
||||||
|
|
||||||
import kotlin.native.concurrent.*
|
import kotlin.native.concurrent.*
|
||||||
import kotlin.native.internal.*
|
import kotlin.native.internal.*
|
||||||
|
import kotlin.native.runtime.Debugging
|
||||||
|
|
||||||
fun setHookAndThrow() {
|
fun setHookAndThrow() {
|
||||||
val hook = { throwable: Throwable ->
|
val hook = { throwable: Throwable ->
|
||||||
|
|||||||
@@ -2,12 +2,13 @@
|
|||||||
* Copyright 2010-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license
|
* Copyright 2010-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license
|
||||||
* that can be found in the LICENSE file.
|
* that can be found in the LICENSE file.
|
||||||
*/
|
*/
|
||||||
@file:OptIn(FreezingIsDeprecated::class, ExperimentalStdlibApi::class)
|
@file:OptIn(FreezingIsDeprecated::class, ExperimentalStdlibApi::class, kotlin.native.runtime.NativeRuntimeApi::class)
|
||||||
|
|
||||||
import kotlin.test.*
|
import kotlin.test.*
|
||||||
|
|
||||||
import kotlin.native.concurrent.*
|
import kotlin.native.concurrent.*
|
||||||
import kotlin.native.internal.*
|
import kotlin.native.internal.*
|
||||||
|
import kotlin.native.runtime.Debugging
|
||||||
|
|
||||||
fun mainLegacyMM() {
|
fun mainLegacyMM() {
|
||||||
val wrong = "wrong"
|
val wrong = "wrong"
|
||||||
|
|||||||
@@ -7,13 +7,14 @@ package kotlin.native.internal
|
|||||||
/*
|
/*
|
||||||
* Internal utilities for debugging K/N compiler and runtime.
|
* Internal utilities for debugging K/N compiler and runtime.
|
||||||
*/
|
*/
|
||||||
public object Debugging {
|
|
||||||
public var forceCheckedShutdown: Boolean
|
|
||||||
get() = Debugging_getForceCheckedShutdown()
|
|
||||||
set(value) = Debugging_setForceCheckedShutdown(value)
|
|
||||||
|
|
||||||
public val isThreadStateRunnable: Boolean
|
@OptIn(kotlin.native.runtime.NativeRuntimeApi::class)
|
||||||
get() = Debugging_isThreadStateRunnable()
|
@Deprecated("Use kotlin.native.runtime.Debugging instead.", ReplaceWith("Debugging", "kotlin.native.runtime.Debugging"))
|
||||||
|
@DeprecatedSinceKotlin(warningSince = "1.9")
|
||||||
|
public object Debugging {
|
||||||
|
public var forceCheckedShutdown: Boolean by kotlin.native.runtime.Debugging::forceCheckedShutdown
|
||||||
|
|
||||||
|
public val isThreadStateRunnable: Boolean by kotlin.native.runtime.Debugging::isThreadStateRunnable
|
||||||
}
|
}
|
||||||
|
|
||||||
@GCUnsafeCall("Kotlin_Debugging_isPermanent")
|
@GCUnsafeCall("Kotlin_Debugging_isPermanent")
|
||||||
@@ -23,12 +24,3 @@ public external fun Any.isPermanent() : Boolean
|
|||||||
@GCUnsafeCall("Kotlin_Debugging_isLocal")
|
@GCUnsafeCall("Kotlin_Debugging_isLocal")
|
||||||
@InternalForKotlinNative
|
@InternalForKotlinNative
|
||||||
public external fun Any.isLocal() : Boolean
|
public external fun Any.isLocal() : Boolean
|
||||||
|
|
||||||
@GCUnsafeCall("Kotlin_Debugging_getForceCheckedShutdown")
|
|
||||||
private external fun Debugging_getForceCheckedShutdown(): Boolean
|
|
||||||
|
|
||||||
@GCUnsafeCall("Kotlin_Debugging_setForceCheckedShutdown")
|
|
||||||
private external fun Debugging_setForceCheckedShutdown(value: Boolean): Unit
|
|
||||||
|
|
||||||
@GCUnsafeCall("Kotlin_Debugging_isThreadStateRunnable")
|
|
||||||
private external fun Debugging_isThreadStateRunnable(): Boolean
|
|
||||||
|
|||||||
@@ -0,0 +1,50 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2023 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||||
|
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package kotlin.native.runtime
|
||||||
|
|
||||||
|
import kotlin.native.internal.GCUnsafeCall
|
||||||
|
import kotlin.native.internal.InternalForKotlinNative
|
||||||
|
|
||||||
|
/**
|
||||||
|
* __Note__: this API is unstable and may change in any release.
|
||||||
|
*
|
||||||
|
* A set of utilities for debugging Kotlin/Native runtime.
|
||||||
|
*/
|
||||||
|
@NativeRuntimeApi
|
||||||
|
@SinceKotlin("1.9")
|
||||||
|
public object Debugging {
|
||||||
|
/**
|
||||||
|
* Run full checked deinitialization on shutdown.
|
||||||
|
*
|
||||||
|
* Make sure that after exiting `main()` only a single thread with Kotlin runtime remains.
|
||||||
|
* Run GC collecting everything including globals.
|
||||||
|
*
|
||||||
|
* When enabled together with [Platform.isCleanersLeakCheckerActive] additionally checks that no cleaners get executed after `main()`
|
||||||
|
*/
|
||||||
|
public var forceCheckedShutdown: Boolean
|
||||||
|
get() = Debugging_getForceCheckedShutdown()
|
||||||
|
set(value) = Debugging_setForceCheckedShutdown(value)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Whether the current thread's state allows running Kotlin code.
|
||||||
|
*
|
||||||
|
* Used by Kotlin/Native internal tests.
|
||||||
|
* If it returns `false`, it's a bug.
|
||||||
|
*/
|
||||||
|
@InternalForKotlinNative
|
||||||
|
public val isThreadStateRunnable: Boolean
|
||||||
|
get() = Debugging_isThreadStateRunnable()
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@GCUnsafeCall("Kotlin_Debugging_getForceCheckedShutdown")
|
||||||
|
private external fun Debugging_getForceCheckedShutdown(): Boolean
|
||||||
|
|
||||||
|
@GCUnsafeCall("Kotlin_Debugging_setForceCheckedShutdown")
|
||||||
|
private external fun Debugging_setForceCheckedShutdown(value: Boolean): Unit
|
||||||
|
|
||||||
|
@GCUnsafeCall("Kotlin_Debugging_isThreadStateRunnable")
|
||||||
|
private external fun Debugging_isThreadStateRunnable(): Boolean
|
||||||
Reference in New Issue
Block a user