@@ -54,6 +54,9 @@ internal final class Lock: @unchecked Sendable {
5454 #elseif os(Windows)
5555 fileprivate let mutex : UnsafeMutablePointer < SRWLOCK > =
5656 UnsafeMutablePointer . allocate ( capacity: 1 )
57+ #elseif os(FreeBSD) || os(OpenBSD)
58+ fileprivate let mutex : UnsafeMutablePointer < pthread_mutex_t ? > =
59+ UnsafeMutablePointer . allocate ( capacity: 1 )
5760 #else
5861 fileprivate let mutex : UnsafeMutablePointer < pthread_mutex_t > =
5962 UnsafeMutablePointer . allocate ( capacity: 1 )
@@ -66,9 +69,17 @@ internal final class Lock: @unchecked Sendable {
6669 #elseif os(Windows)
6770 InitializeSRWLock ( self . mutex)
6871 #else
72+ #if os(FreeBSD) || os(OpenBSD)
73+ var attr = pthread_mutexattr_t ( bitPattern: 0 )
74+ #else
6975 var attr = pthread_mutexattr_t ( )
76+ #endif
7077 pthread_mutexattr_init ( & attr)
78+ #if os(FreeBSD) || os(OpenBSD)
79+ pthread_mutexattr_settype ( & attr, . init( PTHREAD_MUTEX_ERRORCHECK . rawValue) )
80+ #else
7181 pthread_mutexattr_settype ( & attr, . init( PTHREAD_MUTEX_ERRORCHECK) )
82+ #endif
7283
7384 let err = pthread_mutex_init ( self . mutex, & attr)
7485 precondition ( err == 0 , " \( #function) failed in pthread_mutex with error \( err) " )
@@ -157,6 +168,9 @@ internal final class ReadWriteLock: @unchecked Sendable {
157168 fileprivate let rwlock : UnsafeMutablePointer < SRWLOCK > =
158169 UnsafeMutablePointer . allocate ( capacity: 1 )
159170 fileprivate var shared : Bool = true
171+ #elseif os(FreeBSD) || os(OpenBSD)
172+ fileprivate let rwlock : UnsafeMutablePointer < pthread_rwlock_t ? > =
173+ UnsafeMutablePointer . allocate ( capacity: 1 )
160174 #else
161175 fileprivate let rwlock : UnsafeMutablePointer < pthread_rwlock_t > =
162176 UnsafeMutablePointer . allocate ( capacity: 1 )
0 commit comments