       OSMemoryBarrier()
     }
 
-    return (semaphore_signal(semp) == KERN_SUCCESS)
-  }
-
-  func wait() -> Bool
+    let kr = semaphore_signal(semp)
+    precondition(kr == KERN_SUCCESS)
+  }
+
+  func wait()
   {
     if OSAtomicDecrement32Barrier(&svalue) >= 0
     {
-      return true
+      return
     }
 
     if semp == 0

  private var svalue: Int32
  private var semp: semaphore_t

  func signal() -> Bool
  {
    switch OSAtomicIncrement32Barrier(&svalue)
    {
    case let v where v > 0:
      return false

    case Int32.min:
      fatalError("Semaphore signaled too many times")

    {
      guard kr == KERN_ABORTED else { fatalError("Bad response (\(kr)) from semaphore_wait() in \(__FUNCTION__)") }
    }
  }
}
