+- **A rekey's source-epoch retirement is no longer lost when the last reader leaves mid-deferral.** `retire_rekey_source_when_safe` decided to defer under one lock and recorded the obligation under another. A reader dropping between the two ran its drain against a still-empty obligation list, so the record landed where nothing would visit it again and the superseded master key stayed leasable for the life of the handle — while `rekey_db` returned `Ok(())` with no error and no completion state to query. The deferral is now one step under one lock, and a drain that fails keeps every obligation queued instead of discarding the untried remainder.
0 commit comments