From 8a3256f52a79007015f71f937500c9ea18765cff Mon Sep 17 00:00:00 2001 From: asonix Date: Wed, 1 May 2024 15:43:08 -0500 Subject: [PATCH] Avoid deadlock of iterating over tree while transacting on that tree --- src/db.rs | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/db.rs b/src/db.rs index a686fb6..e68560e 100644 --- a/src/db.rs +++ b/src/db.rs @@ -605,6 +605,8 @@ impl Db { pub(crate) async fn add_blocks(&self, domains: Vec) -> Result<(), Error> { self.unblock(move |inner| { + let connected_by_domain = inner.connected_by_domain(&domains).collect::>(); + let res = ( &inner.connected_actor_ids, &inner.blocked_domains, @@ -615,7 +617,7 @@ impl Db { let mut blocked_batch = Batch::default(); let mut allowed_batch = Batch::default(); - for connected in inner.connected_by_domain(&domains) { + for connected in &connected_by_domain { connected_batch.remove(connected.as_str().as_bytes()); } @@ -687,9 +689,11 @@ impl Db { pub(crate) async fn remove_allows(&self, domains: Vec) -> Result<(), Error> { self.unblock(move |inner| { if inner.restricted_mode { + let connected_by_domain = inner.connected_by_domain(&domains).collect::>(); + let mut connected_batch = Batch::default(); - for connected in inner.connected_by_domain(&domains) { + for connected in &connected_by_domain { connected_batch.remove(connected.as_str().as_bytes()); }