Skip to content

Commit

Permalink
Allow usage on no_std targets and targets using portable-atomic (#7)
Browse files Browse the repository at this point in the history
  • Loading branch information
notgull authored Sep 1, 2022
1 parent 3d0cfac commit 7c07f0f
Show file tree
Hide file tree
Showing 3 changed files with 29 additions and 5 deletions.
4 changes: 4 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,10 @@ jobs:
if: startsWith(matrix.rust, 'nightly')
run: cargo check -Z features=dev_dep
- run: cargo test
- name: Install cargo-hack
uses: taiki-e/install-action@cargo-hack
- run: rustup target add thumbv7m-none-eabi
- run: cargo hack build --target thumbv7m-none-eabi --no-default-features --no-dev-deps

msrv:
runs-on: ubuntu-latest
Expand Down
4 changes: 4 additions & 0 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -19,5 +19,9 @@ keywords = ["waker", "notify", "wake", "futures", "async"]
categories = ["asynchronous", "concurrency"]
exclude = ["/.*"]

[dependencies]
# Uses portable-atomic polyfill atomics on targets without them
portable-atomic = { version = "0.3", optional = true, default-features = false }

[dev-dependencies]
futures = "0.3.5"
26 changes: 21 additions & 5 deletions src/lib.rs
Original file line number Diff line number Diff line change
@@ -1,10 +1,26 @@
//! `futures::task::AtomicWaker` extracted into its own crate.
//!
//! # Features
//!
//! This crate adds a feature, `portable-atomic`, which uses a polyfill
//! from the [`portable-atomic`] crate in order to provide functionality
//! to targets without atomics. See the [`README`] for the [`portable-atomic`]
//! crate for more information on how to use it on single-threaded targets.
//!
//! [`portable-atomic`]: https://crates.io/crates/portable-atomic
//! [`README`]: https://github.com/taiki-e/portable-atomic/blob/main/README.md#optional-cfg
use std::cell::UnsafeCell;
use std::fmt;
use std::sync::atomic::AtomicUsize;
use std::sync::atomic::Ordering::{AcqRel, Acquire, Release};
use std::task::Waker;
#![no_std]

use core::cell::UnsafeCell;
use core::fmt;
use core::sync::atomic::Ordering::{AcqRel, Acquire, Release};
use core::task::Waker;

#[cfg(not(feature = "portable-atomic"))]
use core::sync::atomic::AtomicUsize;
#[cfg(feature = "portable-atomic")]
use portable_atomic::AtomicUsize;

/// A synchronization primitive for task wakeup.
///
Expand Down

0 comments on commit 7c07f0f

Please sign in to comment.