pub fn reunite(self, other: Self) -> Result<T, ReuniteError<T>>
    where
        T: Unpin,
    {
        if self.is_pair_of(&other) {
            drop(other);
            let inner = Arc::try_unwrap(self.arc)
                .ok()
                .expect("futures: try_unwrap failed in BiLock<T>::reunite");
            Ok(unsafe { inner.into_value() })
        } else {
            Err(ReuniteError(self, other))
        }
    }
Attempts to put the two "halves" of a `BiLock<T>` back together and
recover the original value. Succeeds only if the two `BiLock<T>`s
originated from the same call to `BiLock::new`.
futures-util/src/lock/bilock.rs