Error on calling suspend functions inside Lock.withLock body
See SuspensionPointInsideCriticalSectionChecker
This commit is contained in:
committed by
Ilmir Usmanov
parent
1d52fb2e26
commit
4db9174b4d
+10
-6
@@ -1,7 +1,8 @@
|
||||
// !DIAGNOSTICS: -UNUSED_PARAMETER, -USELESS_IS_CHECK
|
||||
// SKIP_TXT
|
||||
import kotlin.concurrent.withLock
|
||||
|
||||
val lock = Any()
|
||||
val lock = java.util.concurrent.locks.ReentrantLock()
|
||||
|
||||
fun builder(c: suspend () -> Unit) {}
|
||||
|
||||
@@ -12,14 +13,14 @@ suspend fun suspensionPoint() {}
|
||||
fun test() {
|
||||
builder {
|
||||
synchronized(lock) {
|
||||
<!SUSPENSION_POINT_INSIDE_SYNCHRONIZED!>suspensionPoint<!>()
|
||||
<!SUSPENSION_POINT_INSIDE_CRITICAL_SECTION!>suspensionPoint<!>()
|
||||
}
|
||||
|
||||
synchronized(lock) label@{
|
||||
<!SUSPENSION_POINT_INSIDE_SYNCHRONIZED!>suspensionPoint<!>()
|
||||
<!SUSPENSION_POINT_INSIDE_CRITICAL_SECTION!>suspensionPoint<!>()
|
||||
}
|
||||
|
||||
synchronized(lock, { <!SUSPENSION_POINT_INSIDE_SYNCHRONIZED!>suspensionPoint<!>() })
|
||||
synchronized(lock, { <!SUSPENSION_POINT_INSIDE_CRITICAL_SECTION!>suspensionPoint<!>() })
|
||||
|
||||
synchronized(getLock()) {
|
||||
println("")
|
||||
@@ -30,12 +31,15 @@ fun test() {
|
||||
synchronized(run { getLock() }) {
|
||||
println("")
|
||||
}
|
||||
lock.withLock {
|
||||
<!SUSPENSION_POINT_INSIDE_CRITICAL_SECTION!>suspensionPoint<!>()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
suspend fun run() {
|
||||
synchronized(lock) {
|
||||
<!SUSPENSION_POINT_INSIDE_SYNCHRONIZED!>suspensionPoint<!>()
|
||||
<!SUSPENSION_POINT_INSIDE_CRITICAL_SECTION!>suspensionPoint<!>()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -44,7 +48,7 @@ suspend fun ifWhenAndOtherNonsence() {
|
||||
if (lock == Any()) {
|
||||
when (1) {
|
||||
is Int -> {
|
||||
return@synchronized 1 + <!SUSPENSION_POINT_INSIDE_SYNCHRONIZED!>returnsInt<!>()
|
||||
return@synchronized 1 + <!SUSPENSION_POINT_INSIDE_CRITICAL_SECTION!>returnsInt<!>()
|
||||
}
|
||||
else -> {}
|
||||
}
|
||||
|
||||
+11
-6
@@ -2,7 +2,9 @@
|
||||
// !LANGUAGE: +NewInference
|
||||
// SKIP_TXT
|
||||
|
||||
val lock = Any()
|
||||
import kotlin.concurrent.withLock
|
||||
|
||||
val lock = java.util.concurrent.locks.ReentrantLock()
|
||||
|
||||
fun builder(c: suspend () -> Unit) {}
|
||||
|
||||
@@ -13,14 +15,14 @@ suspend fun suspensionPoint() {}
|
||||
fun test() {
|
||||
builder {
|
||||
synchronized(lock) {
|
||||
<!SUSPENSION_POINT_INSIDE_SYNCHRONIZED!>suspensionPoint<!>()
|
||||
<!SUSPENSION_POINT_INSIDE_CRITICAL_SECTION!>suspensionPoint<!>()
|
||||
}
|
||||
|
||||
synchronized(lock) label@{
|
||||
<!SUSPENSION_POINT_INSIDE_SYNCHRONIZED!>suspensionPoint<!>()
|
||||
<!SUSPENSION_POINT_INSIDE_CRITICAL_SECTION!>suspensionPoint<!>()
|
||||
}
|
||||
|
||||
synchronized(lock, { <!SUSPENSION_POINT_INSIDE_SYNCHRONIZED!>suspensionPoint<!>() })
|
||||
synchronized(lock, { <!SUSPENSION_POINT_INSIDE_CRITICAL_SECTION!>suspensionPoint<!>() })
|
||||
|
||||
synchronized(getLock()) {
|
||||
println("")
|
||||
@@ -31,12 +33,15 @@ fun test() {
|
||||
synchronized(run { getLock() }) {
|
||||
println("")
|
||||
}
|
||||
lock.withLock {
|
||||
<!SUSPENSION_POINT_INSIDE_CRITICAL_SECTION!>suspensionPoint<!>()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
suspend fun run() {
|
||||
synchronized(lock) {
|
||||
<!SUSPENSION_POINT_INSIDE_SYNCHRONIZED!>suspensionPoint<!>()
|
||||
<!SUSPENSION_POINT_INSIDE_CRITICAL_SECTION!>suspensionPoint<!>()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -45,7 +50,7 @@ suspend fun ifWhenAndOtherNonsence() {
|
||||
if (lock == Any()) {
|
||||
when (1) {
|
||||
is Int -> {
|
||||
return@synchronized 1 + <!SUSPENSION_POINT_INSIDE_SYNCHRONIZED!>returnsInt<!>()
|
||||
return@synchronized 1 + <!SUSPENSION_POINT_INSIDE_CRITICAL_SECTION!>returnsInt<!>()
|
||||
}
|
||||
else -> {}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user