From eb8dac0dbc5641bdbce582a026db70b07835d5e7 Mon Sep 17 00:00:00 2001 From: Anders Ha Date: Tue, 3 Jul 2018 21:31:05 +0100 Subject: [PATCH] Always use error checking pthread mutex. --- Sources/Atomic.swift | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/Sources/Atomic.swift b/Sources/Atomic.swift index b35dfe95e..d3f1a131b 100644 --- a/Sources/Atomic.swift +++ b/Sources/Atomic.swift @@ -155,13 +155,7 @@ internal class Lock { attr.deallocate() } - // Darwin pthread for 32-bit ARM somehow returns `EAGAIN` when - // using `trylock` on a `PTHREAD_MUTEX_ERRORCHECK` mutex. - #if DEBUG && !arch(arm) pthread_mutexattr_settype(attr, Int32(recursive ? PTHREAD_MUTEX_RECURSIVE : PTHREAD_MUTEX_ERRORCHECK)) - #else - pthread_mutexattr_settype(attr, Int32(recursive ? PTHREAD_MUTEX_RECURSIVE : PTHREAD_MUTEX_NORMAL)) - #endif let status = pthread_mutex_init(_lock, attr) assert(status == 0, "Unexpected pthread mutex error code: \(status)") @@ -187,6 +181,15 @@ internal class Lock { case EBUSY: return false default: + #if DEBUG && arch(arm) + // Darwin pthread for 32-bit ARM somehow returns `EAGAIN` when + // using `trylock` on a `PTHREAD_MUTEX_ERRORCHECK` mutex. + // + // https://github.com/ReactiveCocoa/ReactiveSwift/pull/508 + if status == EAGAIN { + return false + } + #endif assertionFailure("Unexpected pthread mutex error code: \(status)") return false }