Potentially fix hang when opening LSP menu (#49046)

It is maybe possible that, if a process's parent dies, the PID can be
reused by a different process. This could cause an infinite loop in
`is_descendant_of`. To fix this, break out of the loop when a cycle is
detected.

- [ ] Tests or screenshots needed?
- [X] Code Reviewed
- [X] Manual QA

Release Notes:

- N/A

---------

Co-authored-by: Eric Holk <eric@zed.dev>
This commit is contained in:
John Tur 2026-02-12 12:55:36 -05:00 committed by GitHub
parent 2eb015d10b
commit bd72484994
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -125,7 +125,11 @@ impl ProcessMemoryCache {
fn is_descendant_of(&self, pid: Pid, root_pid: Pid, parent_map: &HashMap<Pid, Pid>) -> bool {
let mut current = pid;
let mut visited = HashSet::default();
while current != root_pid {
if !visited.insert(current) {
return false;
}
match parent_map.get(&current) {
Some(&parent) => current = parent,
None => return false,