#[cfg(feature = "tokio1-task")] mod impl_task { use crate::{DropGuard, DropGuarded}; use tokio1::task::{JoinError, JoinHandle}; impl DropGuarded for JoinHandle { #[inline] fn cancel(self) { self.abort(); } } #[cfg(feature = "tokio1-task")] impl core::future::Future for DropGuard> { type Output = Result; fn poll( mut self: core::pin::Pin<&mut Self>, cx: &mut core::task::Context<'_>, ) -> core::task::Poll { let handle = (*self).inner.as_mut().expect("can only be None in drop"); core::pin::Pin::new(handle).poll(cx) } } } #[cfg(feature = "tokio1-sync")] mod impl_sync { use crate::DropGuarded; impl DropGuarded for tokio1::sync::oneshot::Sender<()> { #[inline] fn cancel(self) { let _ = self.send(()); } } #[cfg(feature = "std")] impl DropGuarded for std::sync::Arc { #[inline] fn cancel(self) { self.close(); } } }