# Changelog
All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## [Unreleased]
No unreleased changes yet
## [v1.2.0] - 2024-10-16
- Soundness fix: ensure the `CriticalSection` token is not `Send` or `Sync`, so that it can only be used in the thread that acquired it. [#55](https://github.com/rust-embedded/critical-section/issues/55)
- Soundness fix: Fix aliasing `&mut` in the `std` implementation. [#46](https://github.com/rust-embedded/critical-section/pull/46)
- Fix build with `restore-state-usize`. [#50](https://github.com/rust-embedded/critical-section/pull/50)
## [v1.1.3] - 2024-08-22
- Added option to use a `usize` sized restore state
## [v1.1.2] - 2023-08-09
- Clarified that `acquire()` must provide ordering guarantees
- Updated atomic-polyfill reference to point to portable-atomic instead
- Improved documentation for `Mutex` example
- Added list of some known implementations
## [v1.1.1] - 2022-09-13
- On the `std` implementation, panicking inside the `critical_section::with()` closure no longer accidentally leaves the critical section locked (#26).
## [v1.1.0] - 2022-08-17
- Added built-in critical section implementation using `std::sync::Mutex`, enabled by the `std` Cargo feature.
- MSRV changed to `1.54` when `std` feature is disabled, `1.63` when enabled.
## [v1.0.0] - 2022-08-10
- Improved docs.
## [v1.0.0-alpha.2] - 2022-07-28
- Change name of the `extern fn`s to avoid clash with critical-section 0.2.
## [v1.0.0-alpha.1] - 2022-07-28
Breaking changes:
- Removed all builtin impls. These are going to be provided by platform-support crates now.
- Renamed `custom_impl!` to `set_impl!`.
- RestoreState is now an opaque struct for the user, and a transparent `RawRestoreState` type alias for impl writers.
- RestoreState type is now configurable with Cargo features. Default is `()`. (previously it was fixed to `u8`.)
- Added own `CriticalSection` and `Mutex` types, instead of reexporting them from `bare_metal`.
## [v0.2.8] - 2022-11-29
- Implemented critical-section by forwarding to version 1.1.1
Breaking changes:
- `acquire` and `release` are only implemented if the restore-state used by
version 1.1.1 is an u8 or smaller.
- No default critical-section implementation is provided.
Those breaking changes are necessary because versions <= 0.2.7 were unsound, and that
was impossible to fix without a breaking change.
This version is meant to minimize that breaking change. However, all
users are encouraged to upgrade to critical-section 1.1.
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.
```toml
[dependencies]
critical-section = { version = "1.1", features = ["std"]}
```
- For single-core Cortex-M targets in privileged mode:
```toml
[dependencies]
cortex-m = { version = "0.7.6", features = ["critical-section-single-core"]}
```
- For single-hart RISC-V targets in privileged mode:
```toml
[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](https://github.com/rust-embedded/critical-section#providing-an-implementation).
## [v0.2.7] - 2022-04-08
- Add support for AVR targets.
## [v0.2.6] - 2022-04-02
- Improved docs.
## [v0.2.5] - 2021-11-02
- Fix `std` implementation to allow reentrant (nested) critical sections. This would previously deadlock.
## [v0.2.4] - 2021-09-24
- Add support for 32bit RISC-V targets.
## [v0.2.3] - 2021-09-13
- Use correct `#[vcfg]` for `wasm` targets.
## [v0.2.2] - 2021-09-13
- Added support for `wasm` targets.
## [v0.2.1] - 2021-05-11
- Added critical section implementation for `std`, based on a global Mutex.
## [v0.2.0] - 2021-05-10
- Breaking change: use `CriticalSection<'_>` instead of `&CriticalSection<'_>`
## v0.1.0 - 2021-05-10
- First release
[Unreleased]: https://github.com/rust-embedded/critical-section/compare/v1.2.0...HEAD
[v1.2.0]: https://github.com/rust-embedded/critical-section/compare/v1.1.3...v1.2.0
[v1.1.3]: https://github.com/rust-embedded/critical-section/compare/v1.1.2...v1.1.3
[v1.1.2]: https://github.com/rust-embedded/critical-section/compare/v1.1.1...v1.1.2
[v1.1.1]: https://github.com/rust-embedded/critical-section/compare/v1.1.0...v1.1.1
[v1.1.0]: https://github.com/rust-embedded/critical-section/compare/v1.0.0...v1.1.0
[v1.0.0]: https://github.com/rust-embedded/critical-section/compare/v1.0.0-alpha.2...v1.0.0
[v1.0.0-alpha.2]: https://github.com/rust-embedded/critical-section/compare/v1.0.0-alpha.1...v1.0.0-alpha.2
[v1.0.0-alpha.1]: https://github.com/rust-embedded/critical-section/compare/v0.2.7...v1.0.0-alpha.1
[v0.2.8]: https://github.com/rust-embedded/critical-section/compare/v0.2.7...v0.2.8
[v0.2.7]: https://github.com/rust-embedded/critical-section/compare/v0.2.6...v0.2.7
[v0.2.6]: https://github.com/rust-embedded/critical-section/compare/v0.2.5...v0.2.6
[v0.2.5]: https://github.com/rust-embedded/critical-section/compare/v0.2.4...v0.2.5
[v0.2.4]: https://github.com/rust-embedded/critical-section/compare/v0.2.3...v0.2.4
[v0.2.3]: https://github.com/rust-embedded/critical-section/compare/v0.2.2...v0.2.3
[v0.2.2]: https://github.com/rust-embedded/critical-section/compare/v0.2.1...v0.2.2
[v0.2.1]: https://github.com/rust-embedded/critical-section/compare/v0.2.0...v0.2.1
[v0.2.0]: https://github.com/rust-embedded/critical-section/compare/v0.1.0...v0.2.0