Chromium Code Reviews| Index: impl/memory/gkvlite_utils.go |
| diff --git a/impl/memory/gkvlite_utils.go b/impl/memory/gkvlite_utils.go |
| index 6c092040a1380214329790fcff2864c27bcd2059..cd96ab28e5cb1d0bb820f1a7a8ca233410563306 100644 |
| --- a/impl/memory/gkvlite_utils.go |
| +++ b/impl/memory/gkvlite_utils.go |
| @@ -25,7 +25,6 @@ func gkvCollide(o, n memCollection, f func(k, ov, nv []byte)) { |
| oldItems, newItems := make(chan *gkvlite.Item), make(chan *gkvlite.Item) |
| walker := func(c memCollection, ch chan<- *gkvlite.Item, wg *sync.WaitGroup) { |
| defer close(ch) |
| - defer wg.Done() |
| if c != nil { |
| c.VisitItemsAscend(nil, true, func(i *gkvlite.Item) bool { |
| ch <- i |
| @@ -35,23 +34,24 @@ func gkvCollide(o, n memCollection, f func(k, ov, nv []byte)) { |
| } |
| wg := &sync.WaitGroup{} |
|
iannucci
2016/11/12 00:05:47
del wg too?
|
| - wg.Add(2) |
| go walker(o, oldItems, wg) |
| go walker(n, newItems, wg) |
| l, r := <-oldItems, <-newItems |
| for { |
| - if l == nil && r == nil { |
| - break |
| - } |
| + switch { |
| + case l == nil && r == nil: |
| + return |
| - if l == nil { |
| + case l == nil: |
| f(r.Key, nil, r.Val) |
| r = <-newItems |
| - } else if r == nil { |
| + |
| + case r == nil: |
| f(l.Key, l.Val, nil) |
| l = <-oldItems |
| - } else { |
| + |
| + default: |
| switch bytes.Compare(l.Key, r.Key) { |
| case -1: // l < r |
| f(l.Key, l.Val, nil) |
| @@ -65,7 +65,6 @@ func gkvCollide(o, n memCollection, f func(k, ov, nv []byte)) { |
| } |
| } |
| } |
| - wg.Wait() |
| } |
| // memStore is a gkvlite.Store which will panic for anything which might |