From 04f51cc9f47b161ef0dbebaaaa6ac05079dfb89a Mon Sep 17 00:00:00 2001 From: Orion Gonzalez Date: Sun, 2 Mar 2025 17:29:05 +0100 Subject: [PATCH] Use a bigger bound if it's available --- src/cargo/util/queue.rs | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/src/cargo/util/queue.rs b/src/cargo/util/queue.rs index bbc68f603fe..eecc40a973e 100644 --- a/src/cargo/util/queue.rs +++ b/src/cargo/util/queue.rs @@ -17,7 +17,6 @@ pub struct Queue { state: Mutex>, popper_cv: Condvar, bounded_cv: Condvar, - bound: usize, } struct State { @@ -29,11 +28,10 @@ impl Queue { pub fn new(bound: usize) -> Queue { Queue { state: Mutex::new(State { - items: VecDeque::new(), + items: VecDeque::with_capacity(bound), }), popper_cv: Condvar::new(), bounded_cv: Condvar::new(), - bound, } } @@ -46,9 +44,10 @@ impl Queue { /// Pushes an item onto the queue, blocking if the queue is full. pub fn push_bounded(&self, item: T) { let locked_state = self.state.lock().unwrap(); + let cap_max = locked_state.items.capacity(); let mut state = self .bounded_cv - .wait_while(locked_state, |s| s.items.len() >= self.bound) + .wait_while(locked_state, |s| s.items.len() >= cap_max) .unwrap(); state.items.push_back(item); self.popper_cv.notify_one(); @@ -64,7 +63,7 @@ impl Queue { None } else { let value = state.items.pop_front()?; - if state.items.len() < self.bound { + if state.items.len() < state.items.capacity() { // Assumes threads cannot be canceled. self.bounded_cv.notify_one(); }