fix: avoid underflow of the queued_tasks metric

Closes STOR-201
This commit is contained in:
Philip Jenvey 2025-04-18 16:29:15 -07:00
parent 31dda13680
commit 10daab06cf
No known key found for this signature in database
GPG Key ID: 5B9F83DE4F7EB7FA

View File

@ -155,7 +155,13 @@ impl BlockingThreadpool {
/// Return the pool's current metrics
pub fn metrics(&self) -> BlockingThreadpoolMetrics {
let spawned_tasks = self.spawned_tasks.load(Ordering::Relaxed);
let active_threads = self.active_threads.load(Ordering::Relaxed);
// active_threads is decremented on a separate thread so there's no
// Drop order guarantee of spawned_tasks decrementing before it does:
// catch the case where active_threads is larger
let active_threads = self
.active_threads
.load(Ordering::Relaxed)
.min(spawned_tasks);
BlockingThreadpoolMetrics {
queued_tasks: spawned_tasks - active_threads,
active_threads,