@@ -24,16 +24,16 @@ func _lockUnlock(_: UnsafeRawPointer)
24
24
25
25
@available ( SwiftStdlib 5 . 9 , * )
26
26
internal struct _ManagedCriticalState< State > {
27
- final private class LockedBuffer : ManagedBuffer < State , UInt8 > { }
27
+ final private class LockedBuffer : ManagedBuffer < State , UnsafeRawPointer > { }
28
28
29
- private let buffer : ManagedBuffer < State , UInt8 >
29
+ private let buffer : ManagedBuffer < State , UnsafeRawPointer >
30
30
31
- internal init( _ buffer: ManagedBuffer < State , UInt8 > ) {
31
+ internal init( _ buffer: ManagedBuffer < State , UnsafeRawPointer > ) {
32
32
self . buffer = buffer
33
33
}
34
34
35
35
internal init( _ initial: State) {
36
- self . init ( LockedBuffer . create ( minimumCapacity: _lockSize ( ) ) { buffer in
36
+ self . init ( LockedBuffer . create ( minimumCapacity: Swift . max ( _lockSize ( ) / MemoryLayout < UnsafeRawPointer > . size , 1 ) ) { buffer in
37
37
buffer. withUnsafeMutablePointerToElements { _lockInit ( UnsafeRawPointer ( $0) ) }
38
38
return initial
39
39
} )
@@ -44,7 +44,9 @@ internal struct _ManagedCriticalState<State> {
44
44
) rethrows -> R {
45
45
try buffer. withUnsafeMutablePointers { header, lock in
46
46
_lockLock ( UnsafeRawPointer ( lock) )
47
- defer { _lockUnlock ( UnsafeRawPointer ( lock) ) }
47
+ defer {
48
+ _lockUnlock ( UnsafeRawPointer ( lock) )
49
+ }
48
50
return try critical ( & header. pointee)
49
51
}
50
52
}
@@ -58,7 +60,7 @@ internal protocol _Deinitializable {
58
60
@available ( SwiftStdlib 5 . 9 , * )
59
61
extension _ManagedCriticalState where State: _Deinitializable {
60
62
final private class DeinitializingLockedBuffer :
61
- ManagedBuffer < State , UInt8 > {
63
+ ManagedBuffer < State , UnsafeRawPointer > {
62
64
deinit {
63
65
withUnsafeMutablePointers { header, lock in
64
66
header. pointee. deinitialize ( )
@@ -67,7 +69,7 @@ extension _ManagedCriticalState where State: _Deinitializable {
67
69
}
68
70
69
71
internal init ( managing initial: State ) {
70
- self . init ( DeinitializingLockedBuffer . create ( minimumCapacity: _lockSize ( ) ) { buffer in
72
+ self . init ( DeinitializingLockedBuffer . create ( minimumCapacity: Swift . max ( _lockSize ( ) / MemoryLayout < UnsafeRawPointer > . size , 1 ) ) { buffer in
71
73
buffer. withUnsafeMutablePointerToElements { _lockInit ( UnsafeRawPointer ( $0) ) }
72
74
return initial
73
75
} )
0 commit comments