diff --git a/crates/lock/src/guard.rs b/crates/lock/src/guard.rs index 2a286e10..f680840f 100644 --- a/crates/lock/src/guard.rs +++ b/crates/lock/src/guard.rs @@ -106,16 +106,15 @@ impl Drop for LockGuard { tracing::warn!("LockGuard channel send failed ({}), spawning fallback unlock task for {}", err, lock_id); // If runtime is not available, this will panic; but in RustFS we are inside Tokio contexts. - let _ = tokio::spawn(async move { - let futures = clients - .into_iter() - .map(|client| { - let id = lock_id.clone(); - async move { client.release(&id).await.unwrap_or(false) } - }) - .collect::>(); - let _ = futures::future::join_all(futures).await; + let handle = tokio::spawn(async move { + let futures_iter = clients.into_iter().map(|client| { + let id = lock_id.clone(); + async move { client.release(&id).await.unwrap_or(false) } + }); + let _ = futures::future::join_all(futures_iter).await; }); + // Explicitly drop the JoinHandle to acknowledge detaching the task. + std::mem::drop(handle); } } } diff --git a/crates/lock/src/local.rs b/crates/lock/src/local.rs index c514a1c2..380fb194 100644 --- a/crates/lock/src/local.rs +++ b/crates/lock/src/local.rs @@ -97,13 +97,7 @@ impl LocalLockMap { guard.remove(&k); } let wait = if due.is_empty() { - next_deadline.and_then(|dl| { - if dl > now { - Some(dl - now) - } else { - Some(Duration::from_millis(0)) - } - }) + next_deadline.map(|dl| if dl > now { dl - now } else { Duration::from_millis(0) }) } else { Some(Duration::from_millis(0)) };