pub(crate) unsafe fn wait(&self, data: D) -> Result<(), D> {
        unsafe { *self.inner.get() = Some(data) }

        match self.status.compare_exchange(POLLING, WAITING, SeqCst, SeqCst) {
            // no unparks came in while we were running
            Ok(_) => Ok(()),

            // guaranteed to be in REPOLL state; just clobber the
            // state and run again.
            Err(status) => {
                assert_eq!(status, REPOLL);
                self.status.store(POLLING, SeqCst);
                Err(unsafe { (*self.inner.get()).take().unwrap() })
            }
        }
    }
Alert the mutex that polling completed with `Pending`.

# Safety

Callable only from the `POLLING`/`REPOLL` states, i.e. between
successful calls to `notify` and `wait`/`complete`.
futures-executor/src/unpark_mutex.rs