Make the crate no_std (#15)
* Remove crossbeam
* Rewrite notification and registration
* Make crate no_std
* Add a comment
diff --git a/src/state.rs b/src/state.rs
index c03fea3..167a371 100644
--- a/src/state.rs
+++ b/src/state.rs
@@ -48,10 +48,16 @@
/// check that tells us if we need to wake anyone without acquiring the lock inside the task.
pub(crate) const AWAITER: usize = 1 << 5;
-/// Set if the awaiter is locked.
+/// Set if an awaiter is being registered.
///
-/// This lock is acquired before a new awaiter is registered or the existing one is woken up.
-pub(crate) const LOCKED: usize = 1 << 6;
+/// This flag is set when `JoinHandle` is polled and we are registering a new awaiter.
+pub(crate) const REGISTERING: usize = 1 << 6;
+
+/// Set if the awaiter is being notified.
+///
+/// This flag is set when notifying the awaiter. If an awaiter is concurrently registered and
+/// notified, whichever side came first will take over the reposibility of resolving the race.
+pub(crate) const NOTIFYING: usize = 1 << 7;
/// A single reference.
///
@@ -61,4 +67,4 @@
///
/// Note that the reference counter only tracks the `Task` and `Waker`s. The `JoinHandle` is
/// tracked separately by the `HANDLE` flag.
-pub(crate) const REFERENCE: usize = 1 << 7;
+pub(crate) const REFERENCE: usize = 1 << 8;