addrman: don't overwrite addr_info when resetting I2P ports #22468
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
In
CAddrMan::ResetI2PPorts()
we copyaddr_info
toaddr_info_newport
, change theport
in the latter and eventually, ifnecessary, we overwrite
addr_info
withaddr_info_newport
.The problem is that after creating the copy,
addr_info.nRandomPos
maybe changed by
ClearNew() -> Delete() -> SwapRandom()
. Later,overwriting the entire
addr_info
with the staleaddr_info_newport
would restore the previous/stale
nRandomPos
.To fix that change just the port in
addr_info
.Fixes #22467