 
   if let def = withDefault where semaphore.setState(.Invalidated)
   {
-    SemaphorePool.Return(semaphore)
     return Selection(id: def)
   }
 

  switch semaphore.state
  {
  case .Select:
    selection = semaphore.selection ?? voidSelection
    semaphore.selection = nil
    semaphore.setState(.Done)

  case .DoubleSelect:
    // this is specific to the extract() side of a double select.
    selection = semaphore.selection ?? voidSelection

  case .Invalidated, .Done:
    selection = voidSelection

  case let status: // default
    preconditionFailure("Unexpected ChannelSemaphore state (\(status)) in __FUNCTION__")
  }

  SemaphorePool.Return(semaphore)

  return selection
}

private let voidReceiver = Receiver<()>()
private let voidSelection = Selection(id: voidReceiver)

  }

  let semaphore = SemaphorePool.Obtain()
  defer { SemaphorePool.Return(semaphore) }
  semaphore.setState(.WaitSelect)

  for option in selectables.shuffle()
