Skip to content

Conversation

@zed-zippy
Copy link
Contributor

@zed-zippy zed-zippy bot commented Dec 26, 2025

Cherry-pick of #45669 to preview


Closes #42845

Repro steps:
#42845 (comment)
Initial investigation and Zed memory trace:
#42845 (comment)

The PR consists of 2 commits:
*
first
adds cosmetic fixes to remove backtraces from logs yet again and print
paths in quotes, as file descriptors may return empty paths.
It also stubs the cause if OOM in project panel: that one traversed all
worktrees in for worktree_snapshot in visible_worktrees and "accepted"
the one with empty paths + never called entry_iter.advance(); in "no
file name found for the worktree" case, thus looping endlessly and
bloating the memory quite fast.

second
adds something that resembles a fix: fn current_path on macOS used the
file handler to re-fetch the worktree root file path on worktree root
canonicalization failure.
What's odd, is that libc::fcntl returns 0 in the case when external
volume is not mounted, thus resulting in the "" path string that is
propagated all the way up.

third
moves the fix down to the platform-related FS implementations

The "fix" now checks the only usage of this method inside async fn process_events for an empty path and bails if that is the case.
I am not sure what is a better fix, but this stops any memory leaks and
given how bad the situation now, seems ok to merge for now with the
TODO comment for more clever people to fix properly later.


Now, when I disconnect the SMB share and reconnect it again, Zed stops
displaying any files in the project tree but the ones opened as editors.

As before, at first, when the share is unmounted, Zed fails to save any
changes because of the timeouts.

Later, when the share is re-connected, macOS Finder hangs still but Zed
starts to react on saves yet still only shows the files that are open as
editors.
The files can be edited and saved from now on.

Later, when Finder finally stops hanging and indicates that the share is
mounted fully, the rest of the file structure reappear in the project
panel, and all file saves are propagated, hence can be observed in the
share in Finder.

It feels that one good improvement to add on top is some "disconnected"
indicator that clearly shows that the file is not properly handles in
the OS.
This requires much more changes and thinking as nothing like that exists
in Zed yet, hence not done.

Release Notes:

  • Fixed Zed OOM-ing when macOS file descriptors become invalid
Closes #42845

Repro steps:
#42845 (comment)
Initial investigation and Zed memory trace:
#42845 (comment)

The PR consists of 2 commits:
*
[first](732d308)
adds cosmetic fixes to remove backtraces from logs yet again and print
paths in quotes, as file descriptors may return empty paths.
It also stubs the cause if OOM in project panel: that one traversed all
worktrees in `for worktree_snapshot in visible_worktrees` and "accepted"
the one with empty paths + never called `entry_iter.advance();` in "no
file name found for the worktree" case, thus looping endlessly and
bloating the memory quite fast.

*
[second](7ebfe5d)
adds something that resembles a fix: `fn current_path` on macOS used the
file handler to re-fetch the worktree root file path on worktree root
canonicalization failure.
What's odd, is that `libc::fcntl` returns `0` in the case when external
volume is not mounted, thus resulting in the `""` path string that is
propagated all the way up.

*
[third](1a7560c)
moves the fix down to the platform-related FS implementations

The "fix" now checks the only usage of this method inside `async fn
process_events` for an empty path and bails if that is the case.
I am not sure what is a better fix, but this stops any memory leaks and
given how bad the situation now, seems ok to merge for now with the
`TODO` comment for more clever people to fix properly later.

----------------

Now, when I disconnect the SMB share and reconnect it again, Zed stops
displaying any files in the project tree but the ones opened as editors.

As before, at first, when the share is unmounted, Zed fails to save any
changes because of the timeouts.

Later, when the share is re-connected, macOS Finder hangs still but Zed
starts to react on saves yet still only shows the files that are open as
editors.
The files can be edited and saved from now on.

Later, when Finder finally stops hanging and indicates that the share is
mounted fully, the rest of the file structure reappear in the project
panel, and all file saves are propagated, hence can be observed in the
share in Finder.

It feels that one good improvement to add on top is some "disconnected"
indicator that clearly shows that the file is not properly handles in
the OS.
This requires much more changes and thinking as nothing like that exists
in Zed yet, hence not done.

Release Notes:

- Fixed Zed OOM-ing when macOS file descriptors become invalid
@cla-bot cla-bot bot added the cla-signed The user has signed the Contributor License Agreement label Dec 26, 2025
@zed-zippy zed-zippy bot merged commit d4541ec into v0.218.x Dec 26, 2025
23 checks passed
@zed-zippy zed-zippy bot deleted the cherry-pick-v0.218.x-a50c5b2c branch December 26, 2025 18:59
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

cla-signed The user has signed the Contributor License Agreement

1 participant