Skip to content

Commit 1b0e196

Browse files
committed
Fix missing atomics in Mutex
Fixes #2263
1 parent 0747913 commit 1b0e196

File tree

1 file changed

+12
-2
lines changed
  • kotlinx-coroutines-core/common/src/sync

1 file changed

+12
-2
lines changed

kotlinx-coroutines-core/common/src/sync/Mutex.kt

+12-2
Original file line numberDiff line numberDiff line change
@@ -347,14 +347,24 @@ internal class MutexImpl(locked: Boolean) : Mutex, SelectClause2<Any?, Mutex> {
347347
}
348348

349349
private class LockedQueue(
350-
@JvmField var owner: Any
350+
owner: Any,
351351
) : LockFreeLinkedListHead() {
352+
private val _owner = atomic(owner)
353+
var owner: Any
354+
get() = _owner.value
355+
set(value) { _owner.value = value }
356+
352357
override fun toString(): String = "LockedQueue[$owner]"
353358
}
354359

355360
private abstract class LockWaiter(
356-
@JvmField val owner: Any?
361+
owner: Any?
357362
) : LockFreeLinkedListNode(), DisposableHandle {
363+
private val _owner = atomic(owner)
364+
var owner: Any?
365+
get() = _owner.value
366+
set(value) { _owner.value = value }
367+
358368
final override fun dispose() { remove() }
359369
abstract fun tryResumeLockWaiter(): Any?
360370
abstract fun completeResumeLockWaiter(token: Any)

0 commit comments

Comments
 (0)