Skip to content

Commit

Permalink
macOS: Drop input handler to avoid editor/project not being dropped (z…
Browse files Browse the repository at this point in the history
…ed-industries#18898)

This fixes the problem of a `Project` sometimes not being dropped when
closing the single, last window of Zed.

Turns out, it wasn't get dropped for the following reason:

1. `editor::Editor` held a reference to project
2. The macOS `input_handler` on the `Window` held a reference to that
`Editor`
3. The AppKit window (and its input handler) get dropped asynchronously
(in the code in this diff), after the window is closed.
4. After the window is closed and no `cx.update()` calls are made
anymore, `flush_effects` is not called anymore.
5. But `flush_effects` is where we dropped entities that don't have any
more references.

In short: we dropped `Editor`, which held a reference to `Project`, out
of band, `flush_effects` wasn't called anymore, and thus the `Project`
wasn't dropped.

cc @ConradIrwin @bennetbo since we talked about this.

Release Notes:

- N/A

Co-authored-by: Antonio <antonio@zed.dev>
  • Loading branch information
mrnugget and as-cii authored Oct 9, 2024
1 parent 5d5c4b6 commit 9c54bd1
Showing 1 changed file with 1 addition and 0 deletions.
1 change: 1 addition & 0 deletions crates/gpui/src/platform/mac/window.rs
Original file line number Diff line number Diff line change
Expand Up @@ -768,6 +768,7 @@ impl Drop for MacWindow {
unsafe {
this.native_window.setDelegate_(nil);
}
this.input_handler.take();
this.executor
.spawn(async move {
unsafe {
Expand Down

0 comments on commit 9c54bd1

Please sign in to comment.