diff --git a/Sources/NIOHTTP2/Frame Buffers/OutboundFlowControlBuffer.swift b/Sources/NIOHTTP2/Frame Buffers/OutboundFlowControlBuffer.swift index 7db2b5e6..ceac61f4 100644 --- a/Sources/NIOHTTP2/Frame Buffers/OutboundFlowControlBuffer.swift +++ b/Sources/NIOHTTP2/Frame Buffers/OutboundFlowControlBuffer.swift @@ -250,6 +250,9 @@ private struct DataBuffer { return self.bufferedChunks.hasMark } + /// An empty buffer, we use this avoid an allocation in 'evacuatePendingWrites'. + private static let emptyBuffer = MarkedCircularBuffer(initialCapacity: 0) + init() { self.bufferedChunks = MarkedCircularBuffer(initialCapacity: 8) self.flushedBufferedBytes = 0 @@ -307,7 +310,7 @@ private struct DataBuffer { /// Removes all pending writes, invalidating this structure as it does so. mutating func evacuatePendingWrites() -> MarkedCircularBuffer { - var buffer = MarkedCircularBuffer(initialCapacity: 0) + var buffer = Self.emptyBuffer swap(&buffer, &self.bufferedChunks) return buffer } diff --git a/Sources/NIOHTTP2/HTTP2StreamChannel.swift b/Sources/NIOHTTP2/HTTP2StreamChannel.swift index 4003635f..2057a7ab 100644 --- a/Sources/NIOHTTP2/HTTP2StreamChannel.swift +++ b/Sources/NIOHTTP2/HTTP2StreamChannel.swift @@ -620,8 +620,8 @@ final class HTTP2StreamChannel