From d905d0f35ba2fb34f061d359dd453e6b38570563 Mon Sep 17 00:00:00 2001 From: bit-aloo Date: Sat, 3 Jan 2026 13:43:23 +0530 Subject: [PATCH] pick workers which have not exited --- crates/proc-macro-api/src/pool.rs | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/crates/proc-macro-api/src/pool.rs b/crates/proc-macro-api/src/pool.rs index 20389f6668..c75e9742a5 100644 --- a/crates/proc-macro-api/src/pool.rs +++ b/crates/proc-macro-api/src/pool.rs @@ -27,11 +27,15 @@ impl ProcMacroServerPool { self.workers[0].exited() } - fn pick_process(&self) -> &ProcMacroServerProcess { + fn pick_process(&self) -> Result<&ProcMacroServerProcess, ServerError> { self.workers .iter() + .filter(|w| w.exited().is_none()) .min_by_key(|w| w.number_of_active_req()) - .expect("worker pool must not be empty") + .ok_or_else(|| ServerError { + message: "all proc-macro server workers have exited".into(), + io: None, + }) } pub(crate) fn load_dylib( @@ -81,7 +85,7 @@ impl ProcMacroServerPool { current_dir: String, callback: Option>, ) -> Result, ServerError> { - let process = self.pick_process(); + let process = self.pick_process()?; let (mut subtree, mut attr) = (subtree, attr); let (mut subtree_changed, mut attr_changed);