Unverified Commit 654ee695 authored by Steven Allen's avatar Steven Allen Committed by GitHub

Merge pull request #45 from ipfs/fix/walk-memory-usage

fix: slightly reduce memory usage when walking large directory trees
parents 2442feaa 663be66f
...@@ -462,8 +462,8 @@ func parallelWalkDepth(ctx context.Context, getLinks GetLinks, root cid.Cid, vis ...@@ -462,8 +462,8 @@ func parallelWalkDepth(ctx context.Context, getLinks GetLinks, root cid.Cid, vis
depth int depth int
} }
feed := make(chan *cidDepth) feed := make(chan cidDepth)
out := make(chan *linksDepth) out := make(chan linksDepth)
done := make(chan struct{}) done := make(chan struct{})
var visitlk sync.Mutex var visitlk sync.Mutex
...@@ -505,7 +505,7 @@ func parallelWalkDepth(ctx context.Context, getLinks GetLinks, root cid.Cid, vis ...@@ -505,7 +505,7 @@ func parallelWalkDepth(ctx context.Context, getLinks GetLinks, root cid.Cid, vis
return return
} }
outLinks := &linksDepth{ outLinks := linksDepth{
links: links, links: links,
depth: depth + 1, depth: depth + 1,
} }
...@@ -526,10 +526,10 @@ func parallelWalkDepth(ctx context.Context, getLinks GetLinks, root cid.Cid, vis ...@@ -526,10 +526,10 @@ func parallelWalkDepth(ctx context.Context, getLinks GetLinks, root cid.Cid, vis
defer close(feed) defer close(feed)
send := feed send := feed
var todoQueue []*cidDepth var todoQueue []cidDepth
var inProgress int var inProgress int
next := &cidDepth{ next := cidDepth{
cid: root, cid: root,
depth: 0, depth: 0,
} }
...@@ -542,22 +542,22 @@ func parallelWalkDepth(ctx context.Context, getLinks GetLinks, root cid.Cid, vis ...@@ -542,22 +542,22 @@ func parallelWalkDepth(ctx context.Context, getLinks GetLinks, root cid.Cid, vis
next = todoQueue[0] next = todoQueue[0]
todoQueue = todoQueue[1:] todoQueue = todoQueue[1:]
} else { } else {
next = nil next = cidDepth{}
send = nil send = nil
} }
case <-done: case <-done:
inProgress-- inProgress--
if inProgress == 0 && next == nil { if inProgress == 0 && !next.cid.Defined() {
return nil return nil
} }
case linksDepth := <-out: case linksDepth := <-out:
for _, lnk := range linksDepth.links { for _, lnk := range linksDepth.links {
cd := &cidDepth{ cd := cidDepth{
cid: lnk.Cid, cid: lnk.Cid,
depth: linksDepth.depth, depth: linksDepth.depth,
} }
if next == nil { if !next.cid.Defined() {
next = cd next = cd
send = feed send = feed
} else { } else {
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment