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 TurandEric Holk authored and GitHub committed 2026-02-12 17:55:36 +00:00
1 parent e2e6e2a4f7
commit 408c4e4e60
1 file changed
+4
+4
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,