Skip to content

Commit 4481cbd

Browse files
authored
Merge pull request #68715 from glessard/rdar115912430
2 parents f181da9 + 61080e1 commit 4481cbd

File tree

1 file changed

+6
-3
lines changed

1 file changed

+6
-3
lines changed

stdlib/public/core/Runtime.swift

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -134,13 +134,16 @@ func _stdlib_atomicInitializeARCRef(
134134
) -> Bool {
135135
// Note: this assumes that AnyObject? is layout-compatible with a RawPointer
136136
// that simply points to the same memory.
137-
var expected: UnsafeRawPointer?
137+
var expected: UnsafeRawPointer? = nil
138138
let unmanaged = Unmanaged.passRetained(desired)
139139
let desiredPtr = unmanaged.toOpaque()
140140
let rawTarget = UnsafeMutableRawPointer(target).assumingMemoryBound(
141141
to: Optional<UnsafeRawPointer>.self)
142-
let wonRace = _stdlib_atomicCompareExchangeStrongPtr(
143-
object: rawTarget, expected: &expected, desired: desiredPtr)
142+
let wonRace = withUnsafeMutablePointer(to: &expected) {
143+
_stdlib_atomicCompareExchangeStrongPtr(
144+
object: rawTarget, expected: $0, desired: desiredPtr
145+
)
146+
}
144147
if !wonRace {
145148
// Some other thread initialized the value. Balance the retain that we
146149
// performed on 'desired'.

0 commit comments

Comments
 (0)