NSLock: lock(before:) - Add some precondition() tests
diff --git a/Foundation/NSLock.swift b/Foundation/NSLock.swift
index 588a704..886b5ba 100644
--- a/Foundation/NSLock.swift
+++ b/Foundation/NSLock.swift
@@ -320,12 +320,22 @@
 
     var timeSpec = timeSpecFrom(date: endTime)
     while var ts = timeSpec {
-        pthread_mutex_lock(timeoutMutex)
-        pthread_cond_timedwait(timeoutCond, timeoutMutex, &ts)
-        pthread_mutex_unlock(timeoutMutex)
-        if pthread_mutex_trylock(mutex) == 0 {
+        let lockval = pthread_mutex_lock(timeoutMutex)
+        precondition(lockval == 0)
+        let waitval = pthread_cond_timedwait(timeoutCond, timeoutMutex, &ts)
+        precondition(waitval == 0 || waitval == ETIMEDOUT)
+        let unlockval = pthread_mutex_unlock(timeoutMutex)
+        precondition(unlockval == 0)
+
+        if waitval == ETIMEDOUT {
+            return false
+        }
+        let tryval = pthread_mutex_trylock(mutex)
+        precondition(tryval == 0 || tryval == EBUSY)
+        if tryval == 0 { // The lock was obtained.
             return true
         }
+        // pthread_cond_timedwait didnt timeout so wait some more.
         timeSpec = timeSpecFrom(date: endTime)
     }
     return false