From a5abe977353e9c4a226a0d8dbc20f07bb78de8ae Mon Sep 17 00:00:00 2001 From: Igor Katson Date: Wed, 21 Aug 2024 16:56:06 +0100 Subject: [PATCH] Drop check better message --- crates/librqbit/src/tests/e2e.rs | 7 ++++++- crates/librqbit/src/tests/test_util.rs | 17 ++++++++++++----- 2 files changed, 18 insertions(+), 6 deletions(-) diff --git a/crates/librqbit/src/tests/e2e.rs b/crates/librqbit/src/tests/e2e.rs index 00fcefe..b43b4ac 100644 --- a/crates/librqbit/src/tests/e2e.rs +++ b/crates/librqbit/src/tests/e2e.rs @@ -38,7 +38,12 @@ async fn test_e2e_download() { .unwrap(); // Wait to ensure everything is dropped. - tokio::time::sleep(Duration::from_secs(1)).await; + tokio::time::sleep(Duration::from_secs(10)).await; + + let metrics = tokio::runtime::Handle::current().metrics(); + assert_eq!(metrics.num_alive_tasks(), 1); + + drop_checks.check().unwrap(); } async fn _test_e2e_download(drop_checks: &DropChecks) { diff --git a/crates/librqbit/src/tests/test_util.rs b/crates/librqbit/src/tests/test_util.rs index 5aca403..1c2e79a 100644 --- a/crates/librqbit/src/tests/test_util.rs +++ b/crates/librqbit/src/tests/test_util.rs @@ -149,12 +149,19 @@ impl DropChecks { name: name.into(), }) } -} -impl Drop for DropCheck { - fn drop(&mut self) { - if self.obj.upgrade().is_some() { - panic!("memory leak: {}", self.name); + pub fn check(&self) -> anyhow::Result<()> { + let mut still_running = Vec::new(); + for dc in self.0.read().iter() { + if dc.obj.upgrade().is_some() { + still_running.push(dc.name.clone()) + } } + if !still_running.is_empty() { + anyhow::bail!( + "still existing objects that were supposed to be dropped: {still_running:#?}" + ) + } + Ok(()) } }