         // no need to try for the semaphore.
         break
 
-      default:
+      case let context: // default
         let ws = Unmanaged<dispatch_semaphore_t>.fromOpaque(COpaquePointer(context)).takeRetainedValue()
         if let s = semaphore.get()
         {

      case waitSelect:
        let threadLock = SemaphorePool.dequeue()
        dispatch_set_context(threadLock, &newElement)
        let contextptr = UnsafeMutablePointer<Void>(Unmanaged.passRetained(threadLock).toOpaque())
        dispatch_set_context(rs, contextptr)
        dispatch_semaphore_signal(rs)
        dispatch_semaphore_wait(threadLock, DISPATCH_TIME_FOREVER)

        let context = dispatch_get_context(threadLock)
        dispatch_set_context(threadLock, nil)
        SemaphorePool.enqueue(threadLock)

          preconditionFailure("Unknown context value (\(context)) in waitSelect case of \(__FUNCTION__)")
        }

      case let context: // default
        // copy data from a pointer to a variable stored "on the stack"
        let element: T = UnsafePointer(context).memory
        dispatch_semaphore_signal(ws)
        return element
