   */
 
   final override var isClosed: Bool { return closed }
+
+  // MARK: ChannelType methods
 
   /**
     Close the channel

    switch context
    {
    case nil:
      // thread was awoken by close() and put() has failed
      return false

    default:

    return false
  }

  override func selectPutNow(selectionID: Selectable) -> Selection?
  {
    OSSpinLockLock(&lock)
    if let rs = readerQueue.dequeue()
    {
      OSSpinLockUnlock(&lock)
      return Selection(selectionID: selectionID, selectionData: rs)
    }
    else
    {
      OSSpinLockUnlock(&lock)
      return nil
    }
  }

  override func selectPut(semaphore: SemaphoreChan, selectionID: Selectable) -> Signal
  {
    let threadLock = dispatch_semaphore_create(0)!

    dispatch_async(dispatch_get_global_queue(qos_class_self(), 0)) {
      _ in
      OSSpinLockLock(&self.lock)
      while !self.closed
      {
        if let rs = self.readerQueue.dequeue()
