Make FreezableAtomicReference atomic when unfrozen for the new MM.

This commit is contained in:
Alexander Shabalin
2021-06-25 21:18:37 +00:00
committed by Space
parent 518e8691b7
commit 28b6427d3e
7 changed files with 28 additions and 34 deletions
@@ -596,17 +596,10 @@ func testShared() throws {
try assertFalse(ValuesKt.isFrozen(obj: obj), "isFrozen(\(obj))")
}
if ValuesKt.isExperimentalMM {
try assertNotFrozen(NSObject())
try assertNotFrozen(TestSharedIImpl())
try assertNotFrozen(ValuesKt.kotlinLambda(block: { return $0 }) as AnyObject)
try assertNotFrozen(FinalClassExtOpen())
} else {
try assertFrozen(NSObject())
try assertFrozen(TestSharedIImpl())
try assertFrozen(ValuesKt.kotlinLambda(block: { return $0 }) as AnyObject)
try assertNotFrozen(FinalClassExtOpen())
}
try assertFrozen(NSObject())
try assertFrozen(TestSharedIImpl())
try assertFrozen(ValuesKt.kotlinLambda(block: { return $0 }) as AnyObject)
try assertNotFrozen(FinalClassExtOpen())
}
class PureSwiftClass {
@@ -59,36 +59,27 @@ data class Data(var int: Int)
assertFailsWith<InvalidMutabilityException> { a8[1] = 2.0 }
// Ensure that String and integral boxes are frozen by default, by passing local to the worker.
val hasToBeFrozen = Platform.memoryModel == MemoryModel.STRICT
val worker = Worker.start()
var data: Any = "Hello" + " " + "world"
if (hasToBeFrozen) {
assertTrue(data.isFrozen)
}
assertTrue(data.isFrozen)
worker.execute(TransferMode.SAFE, { data } ) {
input -> println("Worker 1: $input")
}.result
data = 42
if (hasToBeFrozen) {
assertTrue(data.isFrozen)
}
assertTrue(data.isFrozen)
worker.execute(TransferMode.SAFE, { data } ) {
input -> println("Worker2: $input")
}.result
data = 239.0
if (hasToBeFrozen) {
assertTrue(data.isFrozen)
}
assertTrue(data.isFrozen)
worker.execute(TransferMode.SAFE, { data } ) {
input -> println("Worker3: $input")
}.result
data = 'a'
if (hasToBeFrozen) {
assertTrue(data.isFrozen)
}
assertTrue(data.isFrozen)
worker.execute(TransferMode.SAFE, { data } ) {
input -> println("Worker4: $input")
}.result