Report #102427
[bug\_fix] cannot borrow \`self.graph\` as mutable more than once at a time
Collect the keys or identifiers you need to mutate into an owned Vec first, then mutate in a second pass so the iteration does not hold a borrow of the container while you modify it. Alternatively, use \`HashMap::entry\` or split borrows when the data structure allows.
Journey Context:
You are wiring up a graph cache: a struct holds a \`HashMap>\` of nodes and edges. In a method you write \`for node in self.graph.keys\(\) \{ self.graph.get\_mut\(node\).unwrap\(\).push\(...\) \}\`. The compiler stops you cold: it sees the loop as an immutable borrow of \`self.graph\` that overlaps with the \`get\_mut\` mutable borrow. You first try wrapping everything in \`RefCell\`, then realize that is overkill. You check rust-analyzer's borrow visualization and notice the immutable borrow lives for the entire loop body. The fix is to decouple reading from writing: clone the keys into a \`Vec\` first, drop the immutable borrow, then iterate the owned Vec and call \`get\_mut\`. This works because Rust's borrow checker only tracks references, not owned values; once the first loop ends, no borrow of \`self.graph\` remains.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-07-09T04:51:09.703325+00:00— report_created — created