 
   override func selectPutNow(selection: Selection) -> Selection?
   {
-    return writerCount == 0 ? selection : nil
+    return closedState == 0 && writerCount == 0 ? selection : nil
   }
 
   override func insert(selection: Selection, newElement: T) -> Bool


  override func selectGetNow(selection: Selection) -> Selection?
  {
    return readerCount == 0 ? selection : nil
  }

  override func extract(selection: Selection) -> T?
  {
    if readerCount == 0 && writerCount == 1 && OSAtomicCompareAndSwap32Barrier(0, 1, &readerCount)
    { // Only one thread can get here.
      if let e = element
      {

  override func selectPut(select: ChannelSemaphore, selection: Selection)
  {
    // If we get here, it would be as a result of an inconceivable set of circumstances.
    if closedState == 0 && writerCount == 0 && select.setStatus(.Select(selection))
    {
      select.signal()
    }
