Skip to content

Releases: apple/swift-nio

SwiftNIO 1.0.1

27 Jun 17:37
Compare
Choose a tag to compare

Semver Patch

SwiftNIO 1.8.0

31 May 14:42
695afc5
Compare
Choose a tag to compare

Semver Minor

  • Added new ByteBufferView type, exposing portions of a ByteBuffer as a Collection<UInt8>. Added ByteBuffer.readableBytesView and ByteBuffer.viewBytes(at:length:) to obtain ByteBufferView objects. (#411)
  • Renamed MultiThreadedEventLoopGroup.init(numThreads:) to MultiThreadedEventLoopGroup.init(numberOfThreads:). Deprecated the old name. (#443)
  • Made HTTPRequestDecoder.init(leftOverBytesStrategy:) and enum RemoveAfterUpgradeStrategy public, which allows users creating custom HTTP pipelines to ensure that removing HTTPRequestDecoder after an upgrade was attempted does not cause unexpected bytes delivery. (#438)

Semver Patch

  • Conformed internal _UInt24 and _UInt56 structures to CustomStringConvertible. (#445)
  • Prevented crashes on macOS/iOS when under heavy load and remote peers close connections before we realise they connected. (#453)
  • Miscellaneous code cleanups and testing improvements. (#412, #441, #442, #447, #454)

SwiftNIO 1.7.2

24 May 13:07
Compare
Choose a tag to compare

Semver Patch

  • Removed some unnecessary EventLoopPromise allocations. (#437)
  • Fixed issues where removing a HTTPDecoder could lead to the pipeline consuming raw ByteBuffers, rather than decoded HTTP components. (#430)
  • Fixed an issue where datagram writes would be counted incorrectly, potentially leading to precondition failure. (#431)
  • Resolved a number of re-entrancy issues with HTTPDecoder. (#427)

SwiftNIO 1.7.1

22 May 16:24
Compare
Choose a tag to compare

Semver Patch

  • Fixed an issue where the bootstraps may not correctly invoke the channel initialisers on the event loop for the channel being initialised, causing substantial overhead when configuring the channel. (#424)
  • Fixed issues where Channel objects and their associated sockets created by the bootstraps may be leaked if channel registration failed for any reason. (#413)
  • Fixed issues where the Channel may be deallocated before the ChannelPipeline is cleaned up, causing crashes. (#415)
  • Fixed an issue where write promises were satisfied too early on EmbeddedChannel objects. (#421)
  • Fixed an issue where the WebSocketFrameDecoder would write a connection close frame but not flush it when a protocol error was encountered. (#421)
  • Worked around a compiler crash with type aliases in 4.2 snapshots. (#420)
  • Testing and documentation improvements. (#416, #419, #423, #425)

SwiftNIO 1.7.0

18 May 11:19
Compare
Choose a tag to compare

Semver Minor

  • Added ChannelCore.removeHandlers to help implementers building custom channels do correct channel shutdown. (#408)
  • Added initial support for sending quiescing signals to Channels, and support for these signals to AcceptHandler and HTTPServerPipelineHandler. (#399)
  • Added executable product NIOPerformanceTester to run standardised NIO performance tests. (#396)
  • Made EventLoopFuture.hopTo(eventLoop:) public: while it was introduced in 1.3.0 it was accidentally left internal.

Semver Patch

  • Improved the resilience of ByteToMessageDecoder against re-entrant calls to decode. (#370)
  • Improved performance of writingSequences to ByteBuffer objects in cases where the standard library has fast-path access. (#391, #392)
  • Fixed an issue where we could accidentally corrupt headers or URIs when parsing HTTP/1 messages due to re-entrant calls to decode. (#385)
  • Enhanced SocketChannel objects to register themselves with the Selector lazily, allowing them to more easily be used without needing to handle their registration and binding/connection very carefully. (#388)
  • Removed some warnings when compiling in Swift 4.2 mode. (#407)
  • Removed a String allocation when reading Connection headers to determine keep-alive state for HTTP/1. (#402)
  • Attempted to use http_parser's detected keep-alive status as much as possible in server applications, reducing the computation overhead of checking keep-alive status in most cases. (#299)
  • Removed some reliance on implicit importing of header files on Linux. (#400)
  • Fixed minor invalid pointer type assumption. (#397)
  • Fixed broken 32-bit support. (#383)
  • Miscellaneous tooling and code quality improvements. (#390, #394, #398, #403)

SwiftNIO 1.6.1

04 May 14:53
a5db2a6
Compare
Choose a tag to compare

Semver Patch

  • fix warning in new ByteBuffer test (#377)
  • fix one more register/bind race (#379)
  • fix Swift 4.2 compile error (#384)
  • don't crash if close is called when close fails (#387)
  • fix event loop hop between registration and activation of accepted channels (#389)

SwiftNIO 1.6.0

01 May 18:43
Compare
Choose a tag to compare

Semver Minor

  • Added new UnsafeEmbeddedAtomic type. (#373)
  • Added prepend, removeLast, and last to CircularBuffer. (#347)

Semver Patch

  • Removed warnings in Swift 4.2. (#374)
  • Added more license documentation for 3rd party modules. (#251)
  • Fixed an issue where connect promises could be leaked without being failed. (#337)
  • Reduced the number of memory allocations required to create an EventLoopFuture. (#373)
  • ByteBuffer's debug output is now compatible with being parsed by xxd. (#367)
  • Fixed a bug where WebSocket frames could be delivered multiple times on connection closure. (#368)
  • ByteBuffer.discardReadBytes no longer triggers a memory copy if the buffer was fully consumed. (#363)
  • Improved the ability of the compiler to specialise ByteBuffer copies of contiguous data types. (#360)
  • Worked around an optimiser bug that caused unnecessary heap allocations when writing StaticString objects into ByteBuffers. (#354)
  • Added dtrace scripts for debugging memory allocations. (#352)
  • Greatly reduced the overhead of passing HTTPRequestHead and HTTPResponseHead around the ChannelPipeline by placing them into a CoW heap-allocated box. (#351)
  • Shrunk the size of ByteBuffer and FileRegion to fewer than 3 words, ensuring that enums that wrap these types can still fit into an existential container without triggering heap allocation. (#349)
  • Fixed a bug where the HTTPServerPipelineHandler would incorrectly deliver message parts out of order. (#348)
  • Fixed a bug where Channel.localAddress and Channel.remoteAddress would be nil during channelInactive and handlerRemoved callbacks. (#346)
  • Improved the performance of HTTPHeaders[canonicalForm:] in the case where no headers with that header name exist. (#344)
  • Miscellaneous code & testing improvements. (#335, #338, #353, #356, #357, #358, #361, #362, #365, #366, #371, #375, #376)
  • Documentation improvements. (#359)

SwiftNIO 1.5.1

20 Apr 15:23
902b18d
Compare
Choose a tag to compare

Semver Patch

  • Fixed a bug where we'd accidentally deliver events for unrelated file descriptors. (#341)
  • Fixed the sample web socket server. (#340)
  • Better debug descriptions for HTTPRequestHead, HTTPResponseHead, and HTTPVersion. (#339)

SwiftNIO 1.5.0

19 Apr 12:55
91ef938
Compare
Choose a tag to compare

Semver Minor

  • Improved HTTPServerProtocolErrorHandler and HTTPServerPipelineHandler to interact better together. HTTPServerPipelineHandler now also buffers protocol errors, preventing the ChannelPipeline from seeing those errors until the correct sequence point. HTTPServerProtocolErrorHandler now avoids emitting 400 errors if a partial response is already in flight. (#314)
  • Enhanced WebSocketUpgrader to allow overriding the default maximum websocket frame size. (#315)
  • Made IdleStateHandler.IdleStateEvent public: it had accidentally been made internal. (#319)
  • Enhanced the ChannelCore protocol with unwrapData, allowing external ChannelCore implementers to unwrap NIOAny wrappers. (#321)
  • Enhanced BlockingIOThreadPool with a runWithActive method that automatically fails submitted tasks if the pool has been shut down. (#256)
  • Enhanced NonBlockingFileIO struct with a non-blocking openFile method, allowing users to avoid making blocking open syscalls. (#256)
  • Made HTTPResponseHead and HTTPRequestHead mutable. (#324)
  • Enhanced all NIO core channels with support for registering already-active sockets (that is, sockets that have had connect, listen, or bind called on them already) with NIO event loops, preventing the need to double-call some of these syscalls, an operation that is not always safe. (#285)
  • Enhanced the ServerBootstrap and DatagramBootstrap with a withBoundSocket(descriptor:) method that can take an already-bound socket and use it as the basis for a channel. (#285)
  • Enhanced the ClientBootstrap with a withConnectedSocket(descriptor:) method that can take an already-connected socket and use it as the basis for a channel. (#285)

Semver Patch

  • Fixed issues in HTTP/1 framing where some requests and methods that never have bodies would not parse correctly if they were missing transport headers. (#298)
  • Fixed issues in HTTP/1 framing where EOF was not being passed to the parser to help it decode request/response bodies that are terminated by EOF. (#298)
  • Improved the performance of writing the HTTP/1 request-line and response-line in most cases. (#300)
  • Reduced the number of heap allocations required to manage the state of pending stream writes. (#308)
  • Started processing EOF and socket reset eagerly, rather than attempting to buffer it. This resolved a number of issues with hot-looping on epoll_wait. (#286, #325)
  • Vastly reduced the number of allocations required to write/read integers to/from ByteBuffers. (#316)
  • Improved error handling when connect fails synchronously, preventing the FD from being registered with the selector. (#329)
  • Started failing pending connect promises before notifying the pipeline of changechannelInactive, instead of after. (#330)
  • Many fixes and improvements to the tests. (#311, #318, #326, #332, #331, #334)
  • Miscellaneous code improvements (#312)

SwiftNIO 1.4.2

12 Apr 12:54
3275ff7
Compare
Choose a tag to compare

Semver Patch

  • Fixed a crash when asynchronous connect calls failed. (#309)
  • Fixed a crash when calling close from inside a write promise callback where the write failed due to the channel being closed. (#310)