diff --git a/tokio/src/task/local.rs b/tokio/src/task/local.rs index cb62bd5edf0..8a401fe03b0 100644 --- a/tokio/src/task/local.rs +++ b/tokio/src/task/local.rs @@ -724,4 +724,32 @@ mod tests { join2.await.unwrap() }); } + #[test] + fn drop_cancels_tasks() { + // This test reproduces issue #1842 + use crate::sync::oneshot; + use std::time::Duration; + + let mut rt = runtime::Builder::new() + .enable_time() + .basic_scheduler() + .build() + .unwrap(); + + let (started_tx, started_rx) = oneshot::channel(); + + let local = LocalSet::new(); + local.spawn_local(async move { + started_tx.send(()).unwrap(); + loop { + crate::time::delay_for(Duration::from_secs(3600)).await; + } + }); + + local.block_on(&mut rt, async { + started_rx.await.unwrap(); + }); + drop(local); + drop(rt); + } }