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.
- Potential fix for #3 (long running futures eventually stall):
- Background:
- Turns out this is likely related to ALL executor queues used by this crate (
crossbeam-queue,heapless MPMC) being incompatible with OSes spawning threads at different priorities (since these queues do not use the OS mutexes, they are amenable to priority inversion issues - crossbeam-rs/crossbeam#675 (comment)) - Note that very likely
async-executoris also affected, as it usesconcurrent-queue, which has the same issue - For more tetails, check esp-rs/esp-idf-svc#630
- Turns out this is likely related to ALL executor queues used by this crate (
- Solution:
- Use our own queue based on a mutex +
alloc::VeqDeque(unbounded) orheapless::Deque(bounded) - Since the queue is now protected by a mutex (via
embassy-sync) - as long as the mutex is the OS/Platform one - and it is by default - there should be no priority inversion issues anymore - Furter, allow the user to plug her own executor queue, via the new
ExecutorQueuetrait
- Use our own queue based on a mutex +
- Background:
- Update to heapless 0.8, and use heapless
MpMcQueuefor targets that do not have atomics, ascrossbeamdoes not support such targets yet
- Crate goals clarified
- Crate redesigned to follow the API of
async-executor - Re-implemented as a completely portable executor which is itself a
Future(platform/OS is expected to provide ablock_onor "spawn aFutureonto an event loop" primitive, but the executor is unaware of it) - Documentation, examples, tests
- More user-friendly README