   }
 
 
-  public var selectable: Bool { return closedState == 0 && closingTime > dispatch_time(DISPATCH_TIME_NOW, 0) }
+  public var selectable: Bool { return closedState == 0 }
 
   public func selectNotify(select: ChannelSemaphore, selection: Selection)
   {
     dispatch_after(closingTime, dispatch_get_global_queue(qos_class_self(), 0)) {
-      if select.setState(.Select)
+      [weak self] in
+      guard let this = self else { return }
+
+      this.close()
+      if select.setState(.Invalidated)
       {
-        select.selection = selection
         select.signal()
       }
     }


  public var isEmpty: Bool { return true }

  public var isClosed: Bool { return closedState != 0 || closingTime <= dispatch_time(DISPATCH_TIME_NOW, 0) }

  public func close()
  {


  public func extract(selection: Selection) -> Void?
  {
    assertionFailure("\(__FUNCTION__) shouldn't be getting called")
    return self.receive()
  }
}
