in connect-proxy/Sources/ConnectProxy/ConnectHandler.swift [95:115]
func removeHandler(context: ChannelHandlerContext, removalToken: ChannelHandlerContext.RemovalToken) {
var didRead = false
// We are being removed, and need to deliver any pending bytes we may have if we're upgrading.
while case .upgradeComplete(var pendingBytes) = self.upgradeState, pendingBytes.count > 0 {
// Avoid a CoW while we pull some data out.
self.upgradeState = .upgradeComplete(pendingBytes: [])
let nextRead = pendingBytes.removeFirst()
self.upgradeState = .upgradeComplete(pendingBytes: pendingBytes)
context.fireChannelRead(nextRead)
didRead = true
}
if didRead {
context.fireChannelReadComplete()
}
self.logger.debug("Removing \(self) from pipeline")
context.leavePipeline(removalToken: removalToken)
}