Skip to content

Latest commit

 

History

History
74 lines (51 loc) · 2.58 KB

CHANGELOG.md

File metadata and controls

74 lines (51 loc) · 2.58 KB

Changelog

All notable changes to this project will be documented in this file.

The format is based on Keep a Changelog and this project adheres to Semantic Versioning.

Categories each change fall into

  • Added: for new features.
  • Changed: for changes in existing functionality.
  • Deprecated: for soon-to-be removed features.
  • Removed: for now removed features.
  • Fixed: for any bug fixes.
  • Security: in case of vulnerabilities.

[Unreleased]

[0.1.7] - 2024-05-24

Added

  • Add is_closed method to the Sender.

[0.1.6] - 2023-09-14

Added

  • Add into_raw and from_raw methods on both Sender and Receiver. Allows passing oneshot channels over FFI without an extra layer of heap allocation.

[0.1.5] - 2022-09-01

Fixed

  • Handle the UNPARKING state correctly in all recv methods. try_recv will now not panic if used on a Receiver that is being unparked from an async wait. The other recv methods will still panic (as they should), but with a better error message.

[0.1.4] - 2022-08-30

Changed

  • Upgrade to Rust edition 2021. Also increases the MSRV to Rust 1.60.
  • Add null-pointer optimization to Sender, Receiver and SendError. This reduces the call stack size of Sender::send and it makes Option<Sender> and Option<Receiver> pointer sized (#18).
  • Relax the memory ordering of all atomic operations from SeqCst to the most appropriate lower ordering (#17 + #20).

Fixed

  • Fix undefined behavior due to multiple mutable references to the same channel instance (#18).
  • Fix race condition that could happen during unparking of a receiving Receiver (#17 + #20).

[0.1.3] - 2021-11-23

Fixed

  • Keep the last Waker in Future::poll, not the first one. Stops breaking the contract on how futures should work.

[0.1.2] - 2020-08-11

Fixed

  • Fix unreachable code panic that happened if the Receiver of an empty but open channel was polled and then dropped.

[0.1.1] - 2020-05-10

Initial implementation. Supports basically all the (for now) intended functionality. Sender is as lock-free as I think it can get and the receiver can both do thread blocking and be awaited asynchronously. The receiver also has a wait-free try_recv method.

The crate has two features. They are activated by default, but the user can opt out of async support as well as usage of libstd (making the crate no_std but still requiring liballoc)

[0.1.0] - 2019-05-30

Name reserved on crate.io by someone other than the author of this crate.