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.
- Add send_with_timer() and recv_with_timer() for other async runtime (eg. smol).
- Minor changed to doc
-
Refactor to drop dependency of crossbeam-channel, the underlayering is modified version of crossbeam-queue.
-
Bounded channel speed receive massive boost.
-
AsyncTx can convert back and forth with Tx, and AsyncRx can convert back and forth with Rx.
-
Optimise for VM machine that only have 1 cpu.
-
Use MaybeUninit to optimise the moving of large blob message for bounded channel, in nearly full scenario.
-
Rename ReceiveFuture to RecvFuture, ReceiveTimeoutFuture to RecvTimeoutFuture.
- Remove AsyncTx::send_blocking() and AsyncRx::recv_blocking(), instead, you can use type conversion into Tx/Rx.
- waker_registry: Fix hang detect by miri in cancel_waker(), issue #34
- More strict with the waker status, issue #34 (use SeqCst in reset_init)
- More strict with the waker status, issue #34 (spurious wake up, and waker commit)
- Change is_disconnected() to SeqCst
- RegistryMulti: Fix defend against infinite loop for sink/stream, code introduced from 2.0.20.
- Add clone_to_vec() method in async / blocking tx/rx trait
- AsyncSink: Fix typo in clear waker on drop (Does not affect stability)
-
AsyncTxTrait: Add Into<AsyncSink>
-
AsyncRxTrait: Add Into<AsyncStream>
-
Change the behavior of AsyncSink::poll_send() and AsyncStream::poll_item(), to make sure stream/sink wakers are notified, preventing deadlock from happening if user wants to cancel the operation. Add explanation to the document.
-
Defend against infinite loop when waking up all wakers, given the change of sink/stream.
- Add capacity()
- Change some atomic load ordering from Acquire to SeqCst to pass validation by Miri.
-
Reuse and cleanup waker as much as possible (for idle select scenario)
-
Change some atomic store ordering from Release to SeqCst to avoid further trouble.
-
Add into_blocking()
-
Add missing into_sink() for MAsyncTx.
-
Add From for AsyncSink and AsyncStream.
- Add missing conversion: MAsyncTx->AsyncTx and MTx->Tx
-
Optimise bounded size 1 speed with backoff
-
Updated benchmark result vs kanal to wiki
- Fix a deadlock frostyplanet#22
- Allow type conversion from AsyncTx -> Tx, AsyncRx -> Rx
- Fix a possible hang in LockedQueue introduced from v2.0.5
-
Add Deref/AsRef for sender & receiver type to ChannelShared
-
Add is_full(), get_tx_count(), get_rx_count()
-
Revert the removal of send_blocking() and recv_blocking() (will maintain through 2.0.x)
- Remove DerefMut because it's no used.
- Fix send_timeout() in blocking context
published with the wrong branch, do not use.
-
Add is_disconnected() to sender and receiver type.
-
Add Deref for AsyncSink to AsyncTx, and AsyncStream to AsyncRx, remove duplicated code.
- Fix a rare deadlock, when only one future in async runtime (for example channel async-blocking or blocking-async). Runtime will spuriously wake up with changed Waker.
- Remove send_blocking() & recv_blocking(), which is anti-pattern. (Calling function that blocks might lead to deadlock in async runtime)
- AsyncStream: Add try_recv(), len() & is_empty()
-
AsyncStream: Add poll_item() for writing custom future, as a replacement to AsyncRx's poll_item(), but without the need of LockedWaker.
-
Add AsyncSink::poll_send() for writing custom future, as a replacement to AsyncTx's poll_send(), but without the need of LockedWaker.
-
Implement Debug & Display for all senders and receivers.
- Hide LockedWaker, since AsyncRx::poll_item() and AsyncTx::poll_send() is hidden.
-
Optimise speed for SPSC & MPSC up to 60% (with WeakCell)
-
Add execution time log to test cases.
- Fix LockedQueue empty flag (not affecting usage, just not accurate to internal test cases)
- Support timeout and tested on async-std
-
mark make_recv_future() & make_send_future() deprecated.
-
Change poll_send() & poll_item() to private function.
- Add send_timeout() & recv_timeout() for async context
-
AsyncRx: Fix rare case that message left on disconnect
-
Fixed document typo and improve description.
- Optimise RegistryMulti, with 20%+ speed improved on MPSC / MPMC
- Remove Sync marker in Tx, Rx, AsyncTx, AsyncRx to prevent misuse with Arc
- Remove duplicated code.
-
AsyncRx should not have Clone.
-
Protect against misuse of spsc/mpsc when user should use mpmc (avoiding deadlocks)
- Add channels for blocking context (which equals to crossbeam)
- Remove unused Clone for LockedWaker
- spsc: Add missing unsupported size=0 overwrites
- Add timeout API for blocking context (by Zach Schoenberger)
- Set min Rust version and edition in alignment with crossbeam (by Zach Schoenberger)
-
spsc module
-
Benchmark suite written with criterion.
-
Refactor the API design. Unify sender and receiver types.
-
Removal of macro rules and refactor SendWakers & RecvWakers into Enum, thus removal of generic type in Channelshared structure.
-
Removal of the spin lock in LockedWaker. Simplifying the logic without losing performance.
-
Rewrite the test cases with rstest.
- Drop SelectSame module, because of hard to maintain, can be replace with future-select.
- Migrate repo
From http://github.com/qingstor/crossfire-rs to https://github.com/frostyplanet/crossfire-rs
- Change rust edition to 2024, re-format the code and fix warnnings.
- Fix atomic ordering for ARM (Have been tested on some ARM deployment)
-
Format all code and announcing v1.0
-
I decided that x86_64 stable after one year test.
- tx: Remove redundant old_waker.is_waked() on abandon
- mpsc: Fix RxFuture old_waker.abandon in poll_item
- Replace deprecated compare_and_swap
-
SelectSame: Fix close_handler last_index
-
Fix fetch_add/sub ordering for ARM (discovered on test hang)