diff --git a/Sources/Prometheus/NIOLock.swift b/Sources/Prometheus/NIOLock.swift index 69bb58f..3064360 100644 --- a/Sources/Prometheus/NIOLock.swift +++ b/Sources/Prometheus/NIOLock.swift @@ -48,6 +48,9 @@ import wasi_pthread #if os(Windows) @usableFromInline typealias LockPrimitive = SRWLOCK +#elseif os(FreeBSD) || os(OpenBSD) +@usableFromInline +typealias LockPrimitive = pthread_mutex_t? #else @usableFromInline typealias LockPrimitive = pthread_mutex_t @@ -64,11 +67,19 @@ extension LockOperations { #if os(Windows) InitializeSRWLock(mutex) #elseif (compiler(<6.1) && !os(WASI)) || (compiler(>=6.1) && _runtime(_multithreaded)) + #if os(FreeBSD) || os(OpenBSD) + var attr = pthread_mutexattr_t(bitPattern: 0) + #else var attr = pthread_mutexattr_t() + #endif pthread_mutexattr_init(&attr) assert( { + #if os(FreeBSD) || os(OpenBSD) + pthread_mutexattr_settype(&attr, .init(PTHREAD_MUTEX_ERRORCHECK.rawValue)) + #else pthread_mutexattr_settype(&attr, .init(PTHREAD_MUTEX_ERRORCHECK)) + #endif return true }() )