NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
crates.io · #1847 most downloaded on crates.io
Atomic polyfills, for targets where they're not available.
Last release 3 years ago
no release in 18 months
Ships fairly regularly
a new release about every 3 months
Nearly every release is documented
notes for 1 of 1 stable releases
15 versions withdrawn
withdrawn after publishing
6 years old
16 releases · first in 2021
One column per quarter.
Release v1.0.3, deprecate crate.
Release v1.0.3, deprecate crate.
- Add MSP430 support.
Fix AtomicPtr accidentally not being available when not polyfilled.
AtomicPtr accidentally not being available when not polyfilled.Update to critical-section v1.0
critical-section v1.0This is a breaking change if you were relying on the default implementations available on critical-section 0.2.7 and earlier. They have been removed i…
Bump critical-section dependency from 0.2 to 1.0.
This is a breaking change if you were relying on the default implementations available on critical-section 0.2.7 and earlier.
They have been removed in critical-section 0.2.8 because they were unsound, since there's no way to guarantee they're correct for the
target in use (for example for multi-core embedded targets). Since critical-section 0.2.8 just forwards to 1.0 now, we decided to change atomic-polyfill to use 1.0 directly.
If you're seeing a linker error like undefined symbol: _critical_section_1_0_acquire, you're affected. To fix it:
If your target supports std: Add the critical-section dependency to Cargo.toml enabling the std feature.
[dependencies]
critical-section = { version = "1.1", features = ["std"]}
For single-core Cortex-M targets in privileged mode:
[dependencies]
cortex-m = { version = "0.7.6", features = ["critical-section-single-core"]}
For single-hart RISC-V targets in privileged mode:
[dependencies]
riscv = { version = "0.10", features = ["critical-section-single-hart"]}
For other targets: check if your HAL or architecture-support crate has a critical-section 1.0 implementation available. Otherwise, provide your own.
Fix AtomicPtr accidentally not being available when not polyfilled.
AtomicPtr accidentally not being available when not polyfilled.Switch to only two polyfill levels.
The "CAS" level which uses atomic load/store and critical-section based CAS was not
sound, because critical-section guarantees only "no other critical section can run concurrently",
not "no other code can run concurrently". Therefore a CS-based CAS can still race a native atomic store.
- Added AVR support.
Added support for xtensa (ESP chips), with and without ESP-IDF.
core::sync::atomic::* as-is for unknown targets, to avoid build failures if they don't have full atomic support.Add polyfill support for thumbv4t targets. (Nintendo Game Boy Advance)
thumbv4t targets. (Nintendo Game Boy Advance)get_mut() to AtomicBool.into_inner() to all atomicsfmt::Debug impl to AtomicBool, AtomicPtr.fmt::Pointer impl to AtomicPtr.From<*mut T> impl to AtomicPtr.RefUnwindSafe impl to all atomics.Updated critical-section to v0.2.5. Fixes std implementation to allow reentrant (nested) critical sections. This would previously deadlock.
std implementation to allow reentrant (nested) critical sections. This would previously deadlock.Added support for "full polyfill" level, where load/stores are polyfilled, not just CAS operations.
AtomicU64, AtomicI64.Only import cortex-m when needed
cortex-m when needed (#4)fetch_update due to incorrect ordering (#5)Added missing reexport of fence and compiler_fence in polyfilled mode.
fence and compiler_fence in polyfilled mode.Added polyfills for AtomicU8, AtomicU16, AtomicUsize, AtomicI8, AtomicI16, AtomicI32, AtomicIsize
- First release
Your coding agent can read these notes before it upgrades. Set up the MCP server →