Checkpoint

Antonio Scandurra and Nathan Sobo created

Co-Authored-By: Nathan Sobo <nathan@zed.dev>

Change summary

crates/gpui3/src/app.rs   |  3 ++-
crates/gpui3/src/gpui3.rs | 19 ++++++-------------
2 files changed, 8 insertions(+), 14 deletions(-)

Detailed changes

crates/gpui3/src/app.rs 🔗

@@ -47,9 +47,10 @@ impl App {
     where
         F: 'static + FnOnce(&mut AppContext),
     {
+        let this = self.clone();
         let platform = self.0.lock().platform.clone();
         platform.borrow_on_main_thread().run(Box::new(move || {
-            let cx = &mut *self.0.lock();
+            let cx = &mut *this.0.lock();
             on_finish_launching(cx);
         }));
     }

crates/gpui3/src/gpui3.rs 🔗

@@ -149,19 +149,12 @@ impl<T: 'static + ?Sized> MainThreadOnly<T> {
     where
         R: Send + 'static,
     {
-        let (tx, rx) = oneshot::channel();
-        if self.dispatcher.is_main_thread() {
-            let _ = tx.send(f(&self.value));
-        } else {
-            let this = self.clone();
-            let _ = crate::spawn_on_main(self.dispatcher.clone(), async move {
-                // Required so we move `this` instead of this.value. Only `this` is `Send`.
-                let this = this;
-                let _ = tx.send(f(&this.value));
-            });
-        }
-
-        async move { rx.await.unwrap() }
+        let this = self.clone();
+        crate::spawn_on_main(self.dispatcher.clone(), async move {
+            // Required so we move `this` instead of this.value. Only `this` is `Send`.
+            let this = this;
+            f(&this.value)
+        })
     }
 }