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


  override func put(newElement: T) -> Bool
  {
    if writerCount == 0 && OSAtomicCompareAndSwap32Barrier(0, 1, &writerCount)
    { // Only one thread can get here
      element = newElement
      close() // also increments the 'barrier' semaphore


  override func selectPutNow(selection: Selection) -> Selection?
  {
    return closedState == 0 && writerCount == 0 ? selection : nil
  }

  override func insert(selection: Selection, newElement: T) -> Bool
