From 943adf4dd019e79edf729d9878de5541c8ee8c08 Mon Sep 17 00:00:00 2001 From: Erick Howard Date: Wed, 1 Jan 2025 15:05:24 +0800 Subject: [PATCH] Avoid traversing wait handle list if searching by PID --- src/builtins/wait.rs | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/src/builtins/wait.rs b/src/builtins/wait.rs index 5865317ec..7571aa33d 100644 --- a/src/builtins/wait.rs +++ b/src/builtins/wait.rs @@ -36,13 +36,22 @@ fn find_wait_handles( handles: &mut Vec, ) -> bool { // Has a job already completed? - // TODO: we can avoid traversing this list if searching by pid. let mut matched = false; let wait_handles: &mut WaitHandleStore = &mut parser.mut_wait_handles(); - for wh in wait_handles.iter() { - if wait_handle_matches(query, wh) { - handles.push(wh.clone()); - matched = true; + match query { + WaitHandleQuery::Pid(pid) => { + if let Some(wh) = wait_handles.get_by_pid(pid) { + handles.push(wh); + matched = true; + } + } + _ => { + for wh in wait_handles.iter() { + if wait_handle_matches(query, wh) { + handles.push(wh.clone()); + matched = true; + } + } } }