From 39a3db68bdb48b5d2e83569823b8b652b3b18537 Mon Sep 17 00:00:00 2001 From: Evan Almloff Date: Wed, 1 Feb 2023 14:15:17 -0600 Subject: [PATCH] fix deadlock --- packages/native-core/src/passes.rs | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/packages/native-core/src/passes.rs b/packages/native-core/src/passes.rs index 269c21fc7..d8961068f 100644 --- a/packages/native-core/src/passes.rs +++ b/packages/native-core/src/passes.rs @@ -1,4 +1,5 @@ use anymap::AnyMap; +use core::panic; use parking_lot::RwLock; use rustc_hash::FxHashSet; use std::any::{Any, TypeId}; @@ -80,6 +81,7 @@ impl DirtyNodeStates { let mut dirty = values.get_mut(&pass_id)?; let node_id = dirty.pop()?; if dirty.is_empty() { + drop(dirty); values.remove(&pass_id); } node_id @@ -99,12 +101,17 @@ impl DirtyNodeStates { .iter() .rev() .find(|(_, values)| values.contains_key(&pass_id))?; - let mut dirty = values.get_mut(&pass_id)?; - let node_id = dirty.pop()?; - if dirty.is_empty() { - values.remove(&pass_id); - } + let node_id = { + let mut dirty = values.get_mut(&pass_id)?; + let node_id = dirty.pop()?; + if dirty.is_empty() { + drop(dirty); + values.remove(&pass_id); + } + node_id + }; if values.is_empty() { + drop(dirty_read); let mut dirty_write = self.dirty.write(); dirty_write.remove(&height); }