[release/1.4.18] trie: fix regression that linked all downloaded nodes together
The trie sync code links subtries using pointers into node structs. Since commit40cdcf1183
nodes are no longer copied when unpacking from an interface value, causing all nodes to get linked up as the sync progresses. Fix it by breaking the pointer chain with an explicit copy. (cherry picked from commit2cd7a0395d
)
This commit is contained in:
parent
00ba748707
commit
18c8ded42c
|
@ -213,11 +213,13 @@ func (s *TrieSync) children(req *request) ([]*request, error) {
|
|||
|
||||
switch node := (*req.object).(type) {
|
||||
case *shortNode:
|
||||
node = node.copy() // Prevents linking all downloaded nodes together.
|
||||
children = []child{{
|
||||
node: &node.Val,
|
||||
depth: req.depth + len(node.Key),
|
||||
}}
|
||||
case *fullNode:
|
||||
node = node.copy()
|
||||
for i := 0; i < 17; i++ {
|
||||
if node.Children[i] != nil {
|
||||
children = append(children, child{
|
||||
|
|
Loading…
Reference in New Issue