diff --git a/crates/gpui2/src/app.rs b/crates/gpui2/src/app.rs index 7b77f68398..b7e4cc0c60 100644 --- a/crates/gpui2/src/app.rs +++ b/crates/gpui2/src/app.rs @@ -68,9 +68,27 @@ impl AppCell { #[derive(Deref, DerefMut)] pub struct AppRef<'a>(Ref<'a, AppContext>); +impl<'a> Drop for AppRef<'a> { + fn drop(&mut self) { + if let Some(_) = option_env!("TRACK_THREAD_BORROWS") { + let thread_id = std::thread::current().id(); + eprintln!("dropped borrow from {thread_id:?}"); + } + } +} + #[derive(Deref, DerefMut)] pub struct AppRefMut<'a>(RefMut<'a, AppContext>); +impl<'a> Drop for AppRefMut<'a> { + fn drop(&mut self) { + if let Some(_) = option_env!("TRACK_THREAD_BORROWS") { + let thread_id = std::thread::current().id(); + eprintln!("dropped {thread_id:?}"); + } + } +} + pub struct App(Rc); /// Represents an application before it is fully launched. Once your app is diff --git a/crates/gpui2_macros/src/test.rs b/crates/gpui2_macros/src/test.rs index 84052a2875..70c6da22d5 100644 --- a/crates/gpui2_macros/src/test.rs +++ b/crates/gpui2_macros/src/test.rs @@ -175,10 +175,10 @@ pub fn test(args: TokenStream, function: TokenStream) -> TokenStream { )); inner_fn_args.extend(quote!(&mut #cx_varname_lock,)); cx_teardowns.extend(quote!( - dispatcher.run_until_parked(); - #cx_varname_lock.quit(); drop(#cx_varname_lock); dispatcher.run_until_parked(); + #cx_varname.update(|cx| { cx.quit() }); + dispatcher.run_until_parked(); )); continue; }