diff --git a/data/acltreebuilder.go b/data/acltreebuilder.go index f97aa805..9b669671 100644 --- a/data/acltreebuilder.go +++ b/data/acltreebuilder.go @@ -109,10 +109,12 @@ func (tb *ACLTreeBuilder) buildTreeFromStart(heads []string) (err error) { return } -func (tb *ACLTreeBuilder) dfsFromStart(stack []string) (buf []*Change, possibleRoots []*Change, err error) { +func (tb *ACLTreeBuilder) dfsFromStart(heads []string) (buf []*Change, possibleRoots []*Change, err error) { + stack := make([]string, len(heads), len(heads)*2) + copy(stack, heads) + buf = make([]*Change, 0, len(stack)*2) uniqMap := make(map[string]struct{}) - for len(stack) > 0 { id := stack[len(stack)-1] stack = stack[:len(stack)-1] diff --git a/data/treebuilder.go b/data/treebuilder.go index 1d04804b..62cae49c 100644 --- a/data/treebuilder.go +++ b/data/treebuilder.go @@ -125,10 +125,12 @@ func (tb *TreeBuilder) buildTreeFromStart(heads []string) (err error) { return } -func (tb *TreeBuilder) dfsFromStart(stack []string) (buf []*Change, possibleRoots []*Change, err error) { +func (tb *TreeBuilder) dfsFromStart(heads []string) (buf []*Change, possibleRoots []*Change, err error) { + stack := make([]string, len(heads), len(heads)*2) + copy(stack, heads) + buf = make([]*Change, 0, len(stack)*2) uniqMap := make(map[string]struct{}) - for len(stack) > 0 { id := stack[len(stack)-1] stack = stack[:len(stack)-1] @@ -166,7 +168,10 @@ func (tb *TreeBuilder) buildTree(heads []string, breakpoint string) (err error) return } -func (tb *TreeBuilder) dfs(stack []string, breakpoint string) (buf []*Change, err error) { +func (tb *TreeBuilder) dfs(heads []string, breakpoint string) (buf []*Change, err error) { + stack := make([]string, len(heads), len(heads)*2) + copy(stack, heads) + buf = make([]*Change, 0, len(stack)*2) uniqMap := map[string]struct{}{breakpoint: {}} for len(stack) > 0 {