Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/proc-macro-api/src/pool.rs')
-rw-r--r--crates/proc-macro-api/src/pool.rs10
1 files 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<SubCallback<'_>>,
) -> Result<Result<tt::TopSubtree, String>, 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);