From b105a3bb22fe334e1bb1b458daac4f4dc9066fe0 Mon Sep 17 00:00:00 2001 From: Ivan Moiseev Date: Sat, 12 Oct 2024 15:17:19 +0200 Subject: [PATCH 1/3] fix: transactional pause --- crates/librqbit/src/session.rs | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/crates/librqbit/src/session.rs b/crates/librqbit/src/session.rs index 83a03be..5f26992 100644 --- a/crates/librqbit/src/session.rs +++ b/crates/librqbit/src/session.rs @@ -1365,8 +1365,19 @@ impl Session { } pub async fn pause(&self, handle: &ManagedTorrentHandle) -> anyhow::Result<()> { + let mut g = handle.locked.write(); + let prev = g.paused; + g.paused = true; + drop(g); + handle.locked.write().paused = true; - handle.pause()?; + match handle.pause() { + Ok(()) => {} + Err(err) => { + handle.locked.write().paused = prev; + return Err(err); + } + } self.try_update_persistence_metadata(handle).await; Ok(()) } From bbdb78f773484342f51f5f2f532dfb25b3826468 Mon Sep 17 00:00:00 2001 From: Ivan Moiseev Date: Sat, 12 Oct 2024 15:56:26 +0200 Subject: [PATCH 2/3] feat: remove drop --- crates/librqbit/src/session.rs | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/crates/librqbit/src/session.rs b/crates/librqbit/src/session.rs index 5f26992..bc4e415 100644 --- a/crates/librqbit/src/session.rs +++ b/crates/librqbit/src/session.rs @@ -1365,16 +1365,17 @@ impl Session { } pub async fn pause(&self, handle: &ManagedTorrentHandle) -> anyhow::Result<()> { - let mut g = handle.locked.write(); - let prev = g.paused; - g.paused = true; - drop(g); + let prev_state; + { + let mut g = handle.locked.write(); + prev_state = g.paused; + g.paused = true; + } - handle.locked.write().paused = true; match handle.pause() { Ok(()) => {} Err(err) => { - handle.locked.write().paused = prev; + handle.locked.write().paused = prev_state; return Err(err); } } From be9716e6a7ff5f3a4428c19a55f324cb0e58a59a Mon Sep 17 00:00:00 2001 From: Ivan Moiseev Date: Sat, 12 Oct 2024 16:08:30 +0200 Subject: [PATCH 3/3] fix: simlify --- crates/librqbit/src/session.rs | 15 +-------------- 1 file changed, 1 insertion(+), 14 deletions(-) diff --git a/crates/librqbit/src/session.rs b/crates/librqbit/src/session.rs index bc4e415..579e6da 100644 --- a/crates/librqbit/src/session.rs +++ b/crates/librqbit/src/session.rs @@ -1365,20 +1365,7 @@ impl Session { } pub async fn pause(&self, handle: &ManagedTorrentHandle) -> anyhow::Result<()> { - let prev_state; - { - let mut g = handle.locked.write(); - prev_state = g.paused; - g.paused = true; - } - - match handle.pause() { - Ok(()) => {} - Err(err) => { - handle.locked.write().paused = prev_state; - return Err(err); - } - } + handle.pause().map(|_| handle.locked.write().paused = true)?; self.try_update_persistence_metadata(handle).await; Ok(()) }