Fix double borrow in synchronous tests

This commit is contained in:
Mikayla 2023-11-08 11:23:35 -08:00
parent e1cb993878
commit 1864d37d2e
No known key found for this signature in database
2 changed files with 20 additions and 2 deletions

View file

@ -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

View file

@ -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;
}