Skip to content
This repository has been archived by the owner on Sep 6, 2022. It is now read-only.

Release v0.7.0

Compare
Choose a tag to compare
@Stebalien Stebalien released this 02 Sep 00:48
· 89 commits to master since this release
v0.7.0
d6afc69

This is release includes a significant BREAKING CHANGE to the stream interface.

Previously, Close() closed streams for writing, but left them open for reading. Unfortunately, this meant streams would not be garbage collected until either (a) an EOF had been read on the stream or (b) Reset had been called. While technically documented, this behavior was extraordinarily surprising and most libp2p applications end up misusing and leaking streams (leading to memory leaks).

A CloseRead function has been introduced to close a stream for reading only (writing is still allowed).

  • Any in-progress Read calls will be interrupted with a non-EOF error.
  • No further calls to Read will succeed.
  • The handling of new incoming data on the stream after calling close is implementation defined. Currently,
    • Yamux and Mplex will throw away incoming data on a closed stream.
    • QUIC will return an error to the sender.

Close now closes the stream for both reading and writing. Close is equivalent to calling CloseRead and CloseWrite. Importantly, Close will not wait for any form of acknowledgment. If acknowledgment is required, the caller must call CloseWrite, then wait on the stream for a response (or an EOF), then call Close() to free the stream object.

When done with a stream, the user must call either Close() or Reset() to discard the stream, even after calling CloseRead() and/or CloseWrite().