Change summary
crates/gpui2/src/app.rs | 18 ++++++++++++++++++
crates/gpui2_macros/src/test.rs | 4 ++--
2 files changed, 20 insertions(+), 2 deletions(-)
Detailed changes
@@ -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<AppCell>);
/// Represents an application before it is fully launched. Once your app is
@@ -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;
}