diff --git a/crates/librqbit/src/bitv.rs b/crates/librqbit/src/bitv.rs index f3c0129..38ce994 100644 --- a/crates/librqbit/src/bitv.rs +++ b/crates/librqbit/src/bitv.rs @@ -8,6 +8,7 @@ use bitvec::{ vec::BitVec, view::{AsBits, AsMutBits}, }; +use tracing::trace; pub trait BitV: Send + Sync { fn as_slice(&self) -> &BitSlice; @@ -24,6 +25,12 @@ pub struct MmapBitV { mmap: memmap2::MmapMut, } +impl Drop for MmapBitV { + fn drop(&mut self) { + trace!("dropping MmapBitV, this should unmap the .bitv file") + } +} + impl MmapBitV { pub fn new(file: File) -> anyhow::Result { let mmap = diff --git a/crates/librqbit/src/session.rs b/crates/librqbit/src/session.rs index 0522b7b..0ddf83e 100644 --- a/crates/librqbit/src/session.rs +++ b/crates/librqbit/src/session.rs @@ -1251,14 +1251,6 @@ impl Session { debug!("error pausing torrent before deletion: {e:?}") } - if let Some(p) = self.persistence.as_ref() { - if let Err(e) = p.delete(id).await { - error!(error=?e, "error deleting torrent from persistence database"); - } else { - debug!(?id, "deleted torrent from persistence database") - } - } - let storage = removed .with_state_mut(|s| match s.take() { ManagedTorrentState::Initializing(p) => p.files.take().ok(), @@ -1277,6 +1269,14 @@ impl Session { .map(Ok) .unwrap_or_else(|| removed.shared.storage_factory.create(removed.shared())); + if let Some(p) = self.persistence.as_ref() { + if let Err(e) = p.delete(id).await { + error!(error=?e, "error deleting torrent from persistence database"); + } else { + debug!(?id, "deleted torrent from persistence database") + } + } + match (storage, delete_files) { (Err(e), true) => return Err(e).context("torrent deleted, but could not delete files"), (Ok(storage), true) => {